我有一個我開發的應用程序,它查詢Active Directory信息並將大約15個屬性存儲到保存在內存中的Datatable中。需要幫助減少我的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
有一兩件事我注意到的是,提交大小不降,並在事實上將繼續增長(非常緩慢)幾天。兩天後,Commit大小就達到了36,000K。
現在我非常積極我將所有允許dispose方法的對象和設置其他對象設置爲= Nothing。
如果我看一下任務管理器,其他應用程序的提交大小沒有如此大的佔用空間。
關於如何進一步修剪提交大小的任何想法我的應用程序被擱置?
編輯:
每建議下面我提供了一些從下面CLR探查的信息的:
摘要CSIDir。exe文件
分配的字節:15097943個
搬遷字節:3680460個
最終堆字節:1612611個
對象完成:16194個
關鍵對象完成:148點
第0級的集合:19
創1集合:17
根2個系列:16
誘導收藏:16
Gen 0堆字節:769,019
Gen 1堆字節:156 ,141個
Gen 2的堆字節:947492個
大對象堆字節:40706個
把手創建:4664個
把手破壞:4386
把手存活:278個
堆轉儲:1篇
評論:0
我能夠通過刪除我的一個定時器並更改應用程序中的某些代碼來減少一些線程和內存。 CLR分析器幫助確定了我可能需要處理信息的區域。 我仍然curiuos如何讓虛擬內存致力於減少大小。使用CLR事件探查器,它看起來應用程序在最大隻會使用10MB,因此不太確定爲什麼提交的虛擬內存永遠不會從25 MB變化。 – JoshF 2009-10-19 16:59:31