如何获取Android应用程序正在使用的当前堆大小?

时间:2017-01-18 15:31:30

标签: c# android xamarin.android

我发现可以使用this answer中的java轻松完成,但如果我的应用程序是使用C#.NET和xamarin库编写的,那么无法找到它。如何使用此框架获取相同的数据(当前堆大小,最大堆大小)?

提前致谢。

2 个答案:

答案 0 :(得分:1)

我想你正在寻找这样的东西:

long memory = GC.GetTotalMemory(true);

它检索当前认为要分配的字节数。

还有另一种选择:

Process currentProc = Process.GetCurrentProcess();
long memoryUsed = currentProc.PrivateMemorySize64;

您可以通过阅读PrivateMemorySize64属性来确定内存使用情况。您需要using System.Diagnostics;引用来支持此操作。

答案 1 :(得分:1)

你可以这样做:

//get max heap available to app
var activityManager = (ActivityManager)activity.GetSystemService(Context.ActivityService);
int maxHeap = activityManager.MemoryClass*1024; //KB

//get current heap used by app
Runtime runtime = Runtime.GetRuntime();
int usedHeap = (int)((runtime.TotalMemory() - runtime.FreeMemory()) / 1024.0f); //KB

//get amount of free heap remaining for app
int availableHeap = maxHeap - usedHeap;