開発中のvb.netアプリにてメモリ使用量のログが必要になったので、覚書
やりたいこと
- 開発アプリのメモリ使用量をロギングしたい
環境
- 言語: vb.net
- .Net Framework: 4.5
実装
vb.net
Public Sub SaveMemoryLog()
Try
Dim MsgBuf As String = ""
If System.IO.File.Exists(**ログファイルパス**) = False Then
MsgBuf &= "EXECUTION_TIME" & vbTab
MsgBuf &= "GC_TOTAL_MEMORY" & vbTab
MsgBuf &= "PRIVATE_NEMORY" & vbTab
MsgBuf &= "WORKING_SET" & vbTab
MsgBuf &= "VIRTUAL_MEMORY" & vbTab
MsgBuf &= "METHOD_NAME"
MsgBuf &= vbCrLf
End If
MsgBuf &= Date.Now.ToString("yyyy/MM/dd HH:mm:ss:fff") & vbTab
MsgBuf &= (GC.GetTotalMemory(False) / 1024).ToString("F7").PadLeft(16) & " KB" & vbTab 'マネージド メモリに現在割り当てられているバイト数
Using currentProcess As System.Diagnostics.Process = System.Diagnostics.Process.GetCurrentProcess()
currentProcess.Refresh()
MsgBuf &= (currentProcess.PrivateMemorySize64 / 1024).ToString.PadLeft(8) & " KB" & vbTab 'プロセスに割り当てられたプライベートメモリのバイト数
MsgBuf &= (currentProcess.WorkingSet64 / 1024).ToString.PadLeft(8) & " KB" & vbTab
MsgBuf &= (currentProcess.VirtualMemorySize64 / 1024).ToString.PadLeft(8) & " KB" & vbTab
currentProcess.Close()
End Using
MsgBuf &= MethodName
'WriteLog(**ログファイルパス**, MsgBuf) '自作のログ書込み関数
Catch ex As Exception
SaveErrorLog("SaveMemoryLog", ex)
End Try
End Sub
-
GC.GetTotalMemory(False)
- 公式
- マネージド メモリに現在割り当てられているメモリの量
-
currentProcess.PrivateMemorySize64
- 公式
- プロセスに割り当てられ、他のプロセスと共有できないメモリの量
-
currentProcess.WorkingSet64
- 公式
- プロセスに割り当てられた物理メモリの量
- 共有ワーキングセットと専用ワーキングセットの両方が含まれる
-
currentProcess.VirtualMemorySize64
- 公式
- プロセスに割り当てられた仮想メモリの量
結果
'出力例
EXECUTION_TIME GC_TOTAL_MEMORY PRIVATE_NEMORY WORKING_SET VIRTUAL_MEMORY METHOD_NAME
2019/04/16 00:00:00:262 19989.0546875 KB 97276 KB 128232 KB 816712 KB
2019/04/16 00:00:01:261 19988.1015625 KB 97276 KB 128232 KB 816712 KB
2019/04/16 00:00:02:259 19994.8984375 KB 97276 KB 128232 KB 816712 KB