2009-10-15 4 views
0

Active Directory 정보를 쿼리하고 메모리에 보관되는 Datatable에 약 15 개의 속성을 저장하는 응용 프로그램이 있습니다.내 VB.NET 응용 프로그램의 커밋 크기를 줄이는 데 도움이 필요합니다.

"커밋"메모리의 양을 줄여야합니다.

응용 프로그램은 시스템 트레이에서 활성 상태로 유지되며 사용자의 그림과 함께 정보를 빠르게 검색 할 수 있습니다.

나는 메모리 사용량을 상당히 낮출 수있는 클래스가 있습니다. 그것은 매 10 초마다 타이머에서 실행되며, 아래 : 응용 프로그램 후

Public Class MemoryManagement 

    Private Declare Function SetProcessWorkingSetSize Lib "kernel32.dll" (ByVal process As IntPtr, ByVal minimumWorkingSetSize As Integer, ByVal maximumWorkingSetSize As Integer) As Integer 

    Public Shared Sub FlushMemory() 
     GC.Collect() 
     GC.WaitForPendingFinalizers() 
     If (Environment.OSVersion.Platform = PlatformID.Win32NT) Then 
      SetProcessWorkingSetSize(GetCurrentProcess().Handle, -1, -1) 
     End If 
    End Sub 

End Class 

작업 관리자를로드 보여줍니다 다음

작업 집합 (메모리) - 30,000K
메모리 (개인 작업 집합) - 13,000K
커밋 크기 -

몇 초 후 메모리 관리 클래스에 대한 메모리 사용을 줄일 수 25,000K :

세계에 법과를 왕 세트 (메모리) - 700K
메모리 (개인 작업 집합) - 600K
은 커밋 크기 - 25,000K 내가 눈치 챘을

한 것은 커밋 크기 (아래로 간다 사실 계속 증가 할 것이다 결코이다 매우 천천히) 며칠 동안. 2 일 후 커밋 크기로 36,000K가되었습니다.

이제 나는 dispose 메서드를 허용하고 다른 개체를 = 아무것도 설정하지 않는 모든 개체를 삭제합니다.

작업 관리자를 보면 다른 응용 프로그램은 커밋 크기에 큰 발자국이 없습니다.

커밋 크기를 조정하는 방법에 대한 아이디어가 있습니까?

편집 : CSIDir에 대한

요약 : 나는 아래 CLR 프로파일 러에서 정보의 일부를 포함 시켰습니다 아래의 제안 당

.EXE
할당 된 바이트 : 15,097,943
재배치 바이트 : 3,680,460
최종 힙 바이트 : 1,612,611
개체 확정 : 16,194
긴급 개체 완성 148 개
겐 0 컬렉션 19
겐 1 모음 17
겐 2 모음집 : 16
유도 된 콜렉션 : 16
Gen 0 힙 바이트 : 769,019
Gen 1 힙 바이트 : 156 141
2 세대 힙 바이트 : 947,492
큰 개체 힙 바이트 : 40,706
핸들 생성 : 4,664
핸들이 파괴 : 278
힙 덤프 : 1
코멘트 : 0

+0

타이머 중 하나를 잘라내어 응용 프로그램 내에서 일부 코드를 변경하여 스레드 및 메모리의 수를 약간 줄일 수있었습니다. CLR 프로파일 러는 정보 처분을 위해 필요한 영역을 결정하는 데 많은 도움을주었습니다. 저는 가상 메모리를 줄이기 위해 커 큐어를 사용하고 있습니다. CLR 프로파일 러를 사용하면 최대 10MB 만 사용하므로 커밋 된 가상 메모리가 25MB에서 절대 변경되지 않는 이유는 분명하지 않습니다. – JoshF

답변

1
4,386
살아남은 처리

프로필러 도구를 사용하여 개체가 실제로 할당되고 소멸되는 방식을 확인하는 것이 좋습니다. VB.net 용 프로파일 러 중 하나는 MS에서 제공하는 CLR profiler입니다. 프로파일의 설명을 말한다

CLR 프로필러 할당 유형의 할당과 그래프를 호출 타임 라인 도시 GC를 히스토그램을 포함하는 할당 프로필 유용한 뷰들을 포함

콜렉션 이후에 상태의 관리 힙 상태와 당 메소드 할당을 표시하고 호출 을 표시하는 호출 트리가 있습니다.

+0

원래 게시물을 CLR 프로파일 러의 정보로 업데이트했습니다. 상당한 양의 데이터를 제공하며 잘 해석 할 수있는 애플리케이션에 익숙하지 않습니다. – JoshF

관련 문제