C#을 사용하여 더 이상 참조하지 않고 메모리에있는 큰 구조체의 메모리를 확보하지 못했습니다.C# GC가 메모리를 해제하지 않습니다.
내가 가지고있는 문제와 비슷한 문제를 보여주는 아래 코드를 몇 개 포함했습니다. 왜 다음 코드가 Out of Memory Exception을 던질 지 확신 할 수 없기 때문에 GC에 대해 오해하고 있어야한다고 생각합니다.
내가 포함시킨 코드가 메모리를 낭비하는 이유를 아는 사람이 있습니까? 목록을 보유하고 있지 않으며 즉시 정리할 수 있습니다.
감사합니다,
폴
생식 : 새로운 4.5 콘솔 응용 프로그램은 홈페이지에 코드를 붙여 넣습니다.
for 루프의 첫 번째 반복에서 세 번째 "새 목록"에 예외가 발생합니다. for 루프를 생략하면 OOM이 발생하지 않습니다.
for (var i = 0; i < 100; i++)
{
new List<int>(100 * 1000 * 1000);
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced, blocking: true);
new List<int>(100 * 1000 * 1000);
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced, blocking: true);
new List<int>(100 * 1000 * 1000);
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced, blocking: true);
new List<int>(100 * 1000 * 1000);
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced, blocking: true);
}
실제 프로그램에서 GC를 사용하고 있습니까? 가능하다면 프로그램이 자체 GC를 수행하도록 허용해야합니다. – Sayse
제 생각에는 여기에 대한 의견이 있습니다 만, 세분화 된 메모리 관리 및 GC를 많이해야하는 경우 C#이 작업에 적합한 도구가 아닐 수도 있습니다. C/C++ 같은 것이 더 적합 할 수도 있습니다. 이 두 줄 중 예외를 throw하는 줄은 무엇입니까? – Gray
첫 번째 또는 다른 것? –