저는 C++에서 제 머리를 감싸려고 노력하는 C++ 프로그래머입니다. 배열을 선언하려면 New 연산자를 사용해야합니까? 가비지 수집기가 관련되지는 않을까요?C# 배열과 가비지 컬렉터에 비해 C# 배열
해당 함수 내에서만 사용할 배열을 만들고 프레임 당 수천 번 호출되는 함수가있는 경우 New 연산자에 대한 모든 호출이 가비지 수집기에 대한 상당한 오버 헤드를 생성하지는 않습니다 ?
C++에서는 함수가 끝나고 성능 오버 헤드가 줄어들지 만 스택에서 선언 된 배열이되지만 성능 오버 헤드는 최소화되지만 C#에서는 가비지 수집기의 성능이 얼마나 걸릴지 걱정됩니다 이 경우.
나는 올바른 생각을하고 있습니까? 여기 가비지 컬렉터가 관련되어 있으며 문제를 일으킬 수 있습니까? 더 나은 "C# 방식"이 있나요?
GC는 필요한 경우에만 호출됩니다. 함수 호출 후에 호출되지 않습니다. – zerkms
'new'에 대한 모든 작은 호출은 실제로 오버 헤드를 추가합니다. 그러나 가비지 수집기는 메서드가 종료 될 때마다 실행할 필요가 없습니다. 가비지 수집은 "한 번만"실행됩니다. 그러나 이것이 정말로 문제가된다면 배열을 클래스 멤버로 만들어 재사용 할 수 있도록하십시오. –
나는 이것을 테스트 한 결과 나는 옳았다. New 연산자에 대한 프레임 당 1000 건의 호출은 GC에서 엄청난 오버 헤드를 발생시킵니다. 프로파일 링하여 GC가 프레임의 87 %를 차지하고 프레임 속도를 ~ 60에서 ~ 30으로 떨어 뜨린 것을 발견했습니다. – Mloren