2012-08-15 3 views
-1

매우 큰 메모리 내부 파일로 작업하면 OutOfMemoryException이 발생할 수 있습니다. 프로덕션 환경에서 이러한 문제가 발생하면 모든 .NET 응용 프로그램이 충돌합니다. 모두 동일한 CLR 공간을 공유해야하기 때문입니다. CLR을 "재활용"하는 방법을 이해할 수 없기 때문에 서버가 다시 부팅됩니다.메모리 부족 예외가 발생한 후주기 CLR?

디버깅하는 동안 VS2010에서 이런 일이 발생하면 다른 모든 .NET 작업도 실패하지만 VS2010에서는 그 자체가 작동하지 않습니다. 그러나 CLR을 "재활용"하는 방법을 이해할 수 없기 때문에 워크 스테이션에서 재부팅됩니다.

어떻게 CLR 메모리 공간을 "재활용"할 수 있습니까? .NET Framework (비 IIS) 용으로 작성된 Win32 서비스를 실행하는 서버에서 재활용하는 방법은 무엇입니까?

감사합니다.

+0

이것이 왜 수정되었는지 확실하지 않습니다. OOME은 큰 데이터 작업을 수행 할 때 실제 문제이며, CLR을 사용하는 모든 일 (예 : 서버의 모든 .NET Win32 서비스)이 종료되면 발생합니다. 생산과 개발에서 그것을 어떻게 다루는지를 아는 것이 중요한 문제입니다. – Snowy

답변

0

CLR을 순환 시키려면 프로세스를 종료하고 다시 실행해야합니다. GC.Collect를 호출하여 GC가 현재 사용중인 메모리를 최적화하도록 할 수 있습니다. 그러나 그것이 염려된다면 무언가는 그 기억을 필요로하고 단지 그것을 "순환"시킬 수 없습니다.

+0

"프로세스"란 무엇입니까? 모든 .NET 응용 프로그램은 동일한 CLR을 공유합니다. services.msc에서 나는 "CLR 프로세스"로 표시된 것을 보지 못했습니다. 또한 구성 요소 서비스를 확인하고 IIS와 달리 명확한 "CLR 환경"을 보지 못했습니다. – Snowy

+0

@Snowy 동일한 CLR을 공유 하시겠습니까? 그것은 각 프로세스가 자신의 메모리를 소유한다는 사실과, CLR을 독립적으로로드해야한다는 사실 모두에서 말도 안되는 사실입니다. CLR의 여러 버전을 설치하면 .NET 응용 프로그램이 특정 버전을 사용할 수 있다는 사실에 말도 안됩니다. . – exacerbatedexpert

관련 문제