2011-10-27 4 views
3

내 응용 프로그램 중 하나에서 메모리 누수처럼 보이는 문제가 있습니다 (응용 프로그램이 시간이 지남에 따라 더 많은 메모리를 사용하고 약 1 주일 후에 작업이 중단됩니다).메모리 누수 및 약한 참조

필자가 작성한 클래스와 관련된 누수를 감지하여 수정했으며 (sos.dll로 얻은 힙 덤프와 비교하여 신속하게 알려주는) 누적 횟수를 늘리고 더 이상 증가시키지 않습니다.

현재 시간이 지남에 따라 극적으로 증가하는 것은 WeakReference 인스턴스이며, 이는 꾸준한 비율로 1,000 분의 1 분당 신규 인스턴스 WeakReference으로 증가합니다.

내 코드는 WeakReference을 직접 사용하지 않으며 직접 작성하지 않습니다.

많은 수의 WeakReference 인스턴스가 생성 될 수 있습니까? 내가 VB.NET을 사용하고

, 비주얼 스튜디오 2008 및 .NET 3.5

+1

ORM을 사용하고 있습니까? (Entity Framework, Linq-to-SQL, NHibernate와 같은) 당신의 웹 애플리케이션인가? – xanatos

+2

Microsoft의 [CLR 프로파일 러] (http://www.microsoft.com/download/en/details.aspx?id=16273)를 사용하여 참조를 보유하고 있는지 확인해 보셨습니까? –

+0

내 응용 프로그램은 로컬 응용 프로그램 (직렬 포트 또는 TCP 소켓을 통해 다른 장치와 통신)입니다. 내가 사용하는 유일한 ORM은 LINQ2SQL이며, 이는 자주 사용되지 않는 보조 기능입니다 (사용자가 특별히 해당 기능을 호출하지 않는 한 호출되지 않습니다). 당신이 그것을 할 수 있다고 생각한다면 테스트를 위해 ORM 부분을 앱에서 완전히 잘라낼 수 있습니다. –

답변

8

예,이 VB.NET 어셈블리에서 상당히 악명 높은 누설입니다. WithEvents 키워드로 선언 된 이벤트를 추적하는 약한 참조로 인해 발생합니다. 이 추적은 편집 및 계속을 지원하기 위해 수행됩니다. 클래스에서 선언 된 모든 WithEvents 이벤트에 대해 WeakReference 인스턴스 하나가 누설됩니다. 해당 WeakReference 객체를 해제하려면 디버거를 첨부해야합니다.

해결 방법은 간단합니다. 디버그 빌드가 아닌 릴리스 빌드를 제공하십시오.

+0

이 문제가 해결 되었습니까? 또한, 왜 그리고 어떻게 이런 일이 발생했는지에 대한 자세한 내용을 제공해 줄 수 있습니까? 인터넷 검색을하는 동안 발견 된 유일한 유용한 정보는이 답변입니다. –