【问题标题】:How to get the current heap size that an android application is using?如何获取 android 应用程序正在使用的当前堆大小?
【发布时间】:2017-06-03 01:27:38
【问题描述】:

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

提前致谢。

【问题讨论】:

  • 请注意,这些值在 Android 应用程序开发中并不是特别有用。特别是,报告的可用堆空间量并不表示您可以在单个请求中分配多少,因为 Android 的堆在大部分时间都会受到碎片的影响。
  • 我明白了,无论如何我都需要这些数据,因为它是为我请求的。但是谢谢

标签: c# android xamarin.android


【解决方案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;

【讨论】:

    【解决方案2】:

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

    long memory = GC.GetTotalMemory(true);
    

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

    还有另一种选择:

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

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

    【讨论】:

      猜你喜欢
      • 2011-01-02
      • 1970-01-01
      • 1970-01-01
      • 2017-04-26
      • 1970-01-01
      • 1970-01-01
      • 2021-05-09
      • 2016-01-29
      • 1970-01-01
      相关资源
      最近更新 更多