WindowsPhone7アプリのメモリ使用量を分析しようとしています。プロパティをクエリするApplicationPeakMemoryUsage
と、ソークテストの後に約90Mbの値が得られます。System.GC.GetTotalMemory(true)
この時点で〜11Mbを返すため、バランスはアンマネージメモリである必要があります。アプリはアンマネージメモリを明示的に割り当てないため、バランスはGPUアセット、オーディオ、アプリのバイナリ自体であると想定しています。
呼び出しContentManager.Load()
とGPUリソース割り当て(new RenderTarget2D()
など)を囲むことによって。に似たコードで
System.GC.Collect();
unused = System.GC.GetTotalMemory(true);
GC.WaitForPendingFinalizers();
long mem = ((long)Microsoft.Phone.Info.DeviceExtendedProperties.GetValue("ApplicationCurrentMemoryUsage"));
.
. // perform loads/allocations
.
mem = ((long)Microsoft.Phone.Info.DeviceExtendedProperties.GetValue("ApplicationCurrentMemoryUsage")) - mem;
レンダリングバッファ、テクスチャ/オーディオリソースなどで使用されるメモリのおおよその数値を取得できます。これらの合計は、アプリ全体で約45〜50Mbです。ApplicationCurrentMemoryUsage
初期化の開始直後に10Mbをわずかに下回る収量。11Mbのマネージヒープも差し引くと(これは部分的に二重にカウントされます!)、これにより約20Mbが考慮されなくなります。
Mangoメモリプロファイラーは合計を追跡しますが、管理対象ヒープの割り当てを分類するだけです。GPUリソース、オーディオ、アプリバイナリ自体以外に、大量のアンマネージメモリを使用している可能性があるのは他にありますか?私がしていることよりも、記憶を追跡するための賢明なツールや方法はありますか?