推 Euteamo: 謝謝你,這招我有試過,要用development build才看的到 01/14 08:32
→ Euteamo: 目前我是在c#中寫一個exe,去抓遊戲的pid抓他的記憶體量 01/14 08:35
→ Euteamo: 然後按一個按鈕,開啟EXE並回傳記憶體量 QQ 01/14 08:36
Profiler 類別在 non-development build 會完全失效沒錯 QQ
如果你是在Window上開發,又只想看Process記憶體的話
也可以使用GetProcessMemoryInfo
因為Unity最近的版本開始有支援64位元的版本
需要在參數結構上多做一些判斷
[StructLayout(LayoutKind.Sequential)]
private struct MemInfo
{
public uint cb;
public uint PageFaultCount;
//! 64bit version ?
//! http://feedback.unity3d.com/suggestions/additional-define-variables
#if (UNITY_64 || UNITY_EDITOR_64)
public ulong PeakWorkingSetSize;
public ulong WorkingSetSize;
public ulong QuotaPeakPagedPoolUsage;
public ulong QuotaPagedPoolUsage;
public ulong QuotaPeakNonPagedPoolUsage;
public ulong QuotaNonPagedPoolUsage;
public ulong PagefileUsage;
public ulong PeakPagefileUsage;
#else
public uint PeakWorkingSetSize;
public uint WorkingSetSize;
public uint QuotaPeakPagedPoolUsage;
public uint QuotaPagedPoolUsage;
public uint QuotaPeakNonPagedPoolUsage;
public uint QuotaNonPagedPoolUsage;
public uint PagefileUsage;
public uint PeakPagefileUsage;
#endif
}
[DllImport("psapi.dll", SetLastError = true)]
static extern bool GetProcessMemoryInfo(IntPtr hProcess,
out MemInfo info, uint cb);
MemInfo _memInfo = new MemInfo();
使用時大概像這樣:
IntPtr hWnd = System.Diagnostics.Process.GetCurrentProcess().Handle;
if (GetProcessMemoryInfo(hWnd, out _memInfo,
(uint)Marshal.SizeOf(_memInfo)))
{
//! Total System Memory Usage
WorkingSetSize = _memInfo.WorkingSetSize / 1048576f;
}
不過結果還是會有些誤差,當參考就好XD
http://imgur.com/VEm0jYg
※ 編輯: chowleft (118.163.12.157), 01/14/2015 22:04:19
推 Euteamo: 謝謝分享 有成功喔!! 01/17 09:47