.NET 쓰레기 수집 : 디버그 vs. 릴리스 conndrum
릴리스 빌드 동작
<code class="language-csharp">public class Class1 { public static int c; ~Class1() { c++; } } public class Class2 { public static void Main() { { var c1 = new Class1(); //c1 = null; // Uncommenting doesn't significantly change release behavior } GC.Collect(); GC.WaitForPendingFinalizers(); Console.WriteLine(Class1.c); // Prints 0 in debug, 1 in release Console.Read(); } }</code>
디버거가 없으면 쓰레기 수집기가 메모리를 효율적으로 되 찾습니다. 참조가 포함 된 메소드가 여전히 실행중인 경우에도 해당 메소드가 더 이상 직접 참조되지 않으면 객체를 수집 할 수 있습니다. 이것은 메모리 누출을 방지합니다. c1
설정 to 는 릴리스 빌드 결과를 크게 변경하지 않습니다. JIT Optimizer는 기능적으로 중복 되므로이 라인을 제거 할 수 있습니다. 결론
위 내용은 Garbage Collection이 디버그 빌드에서 내 객체를 마무리하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!