나는 꽤 배고픈 응용 프로그램을 가지고있다. 일부 대형 배열에는 많은 양의 데이터가 저장됩니다.OutOfMemoryException
저는 최근에 가끔 OutOfMemoryException을 발견했습니다. 이러한 OutOfMemoryExceptions은 내 응용 프로그램 (ASP.Net)이 사용 가능한 800MB를 모두 소비하기 훨씬 전에 발생합니다. 배열의 크기가 조정 된 코드 영역까지 문제를 추적했습니다. 배열에는 74 바이트 크기의 구조가 포함됩니다. (나는 16bytes보다 큰 구조체를 생성해서는 안된다는 것을 알고 있지만,이 응용 프로그램은 Vb6 응용 프로그램의 포트입니다). 구조체를 클래스로 변경하려고 시도했지만 현재 문제가 해결 된 것으로 보입니다.
클래스를 변경하면 구조체와 배열을 사용할 때 크기를 조정할 때 새 배열을 저장할 메모리 세그먼트가 예약되어야한다는 사실과 관련이 있다고 생각합니다. (예 : (currentArraySize + increaseBySize) * 74)을 찾을 수 없습니다. 이로 인해 OutOfMemoryException이 발생합니다.
배열의 각 요소가 새 개체에 대한 포인터를 저장하는 데 8 바이트 만 필요하기 때문에 클래스에는 해당되지 않습니다.
여기 내 생각이 맞습니까?
더의 정보를 참조하십시오. 클래스를 사용하도록 변경했을뿐만 아니라 배열을 늘리는 전략도 변경했습니다. 한 번에 10000 개 요소가 증가했습니다. 이제 일반 목록과 동일한 전략을 사용하고 있습니다. 즉 필요할 때 배열의 크기를 두 배로 늘릴 수 있습니다. – Andrew