什么是正常的记忆 - 公羊大​​小?(xamarin)

时间:2017-12-06 21:06:37

标签: c# android xamarin xamarin.android

我正在使用内部有许多活动的应用程序。还有listview图像等。这是来自apk的图片。       这是一张图片Analyzer

首先问一下这个带红圈的记忆是什么?拉姆?还是堆内存? 第二个问题每个apk的正常大小是什么。它比一些内存安全吗? 第三个问题我的应用程序,如果此内存超过380mb。在某些情况下,它崩溃我的apk.with错误消息apk没有回应。我可以为此做点什么吗? 最常见的活动使用包含内容项的列表视图:以下是我的代码的一部分: 我在我的apk中使用了非常多的sqlite。

var table = db.Query<InventoryPreviewClass>(
    "select * from InventoryPreviewClass where CategoryID =" + 
    Connection.CategoryID + " and InventoryItemName like '%" + 
    etSearchAlwaysOn.Text.ToUpper() + "%'");

mItems = new List<InventoryPreviewClass>();

foreach(var item in table)
{
    mItems.Add(new InventoryPreviewClass() { 
        InventoryItemID = item.InventoryItemID, 
        InventoryItemName = item.InventoryItemName, 
        InventoryItemPrice = item.InventoryItemPrice 
    });
}

MyListViewAdapterInventory adapter = new MyListViewAdapterInventory(this, Resource.Layout.InventoryPreview, mItems);
mlistview.Adapter = adapter;

我也标记java导致其类似的

1 个答案:

答案 0 :(得分:2)

  

首先问一下这个带红圈的记忆是什么?拉姆?还是堆内存?

工作集:指进程使用的总物理内存(RAM)。有关详细信息,请参阅:What is private bytes, virtual bytes, working set?

  

第二个问题每个apk的正常大小是多少。它比大量内存安全吗?

Android提供MemoryClass on ActiviyManager API以获取您设备的价值,对于deatail信息,您可以参考:What is the maximum amount of RAM an app can use?

  

如果此内存超过380mb,请回答我的申请。在某些情况下,它崩溃了我的apk。

正如你所说,你的应用程序有ListView图像,在某些情况下它会崩溃你的apk,当你的应用程序一次加载很多图像时会占用大量内存,通常会导致{{1} },所以我认为你的问题是OutOfMemoryError您应该更加关注应用中的堆大小,而不是OutOfMemoryError 。正如Android document所说:

  

为了允许多个正在运行的进程,Android为每个应用分配的堆大小设置了硬限制。 根据设备总体可用RAM的大小,设备之间的确切堆大小限制会有所不同。如果您的应用已达到堆容量并尝试分配更多内存,系统将抛出OutOfMemoryError。

由于我们不知道您是如何将图片加载到列表视图中的,因此以下是一些建议:

    1. 建议实施图像缓存,但不需要重新发明轮子,而是专注于应用程序的核心逻辑。 只需使用已知且可靠的Cache for amp; amp;提取图片,例如PicassoGlide。然后,您可以使用它来加载Working Set中的图像,如下所示:

      listview
    1. 尝试实施View Holder Pattern以提高效果Picasso.With(context).Load(imageUrl).Into(imageView); 。 Xamrin.Android示例here
    1. 确保您的应用程序中没有内存泄漏。