iOS 活动监视器中的实时字节与实际内存
Posted
技术标签:
【中文标题】iOS 活动监视器中的实时字节与实际内存【英文标题】:Live Bytes vs Real Memory in Activity Monitor on iOS 【发布时间】:2012-02-06 09:01:48 【问题描述】:我正在开发一个 ios 应用程序,该应用程序将创建许多小对象和浮点数,并试图了解它消耗了多少内存。
当我运行“Allocations”工具时,它说我有大约 2MB 的“Live Bytes”,当我在应用程序中移动时,这个数字大致保持不变(当应用程序繁忙时,这个数字会达到 3MB 左右,但是然后回落到 2MB)。
但是当我运行“Activity Monitory”工具时,我的应用程序的“真实内存”在完成启动后为 25MB,并且每当在我的 CALayer 中发生绘图时都会迅速增长。不到一分钟,它就超过了 100MB。
为什么“Live Bytes”会显示 2MB,而“Real Memory”会显示 100MB?
我的 CALayer 正在绘制 吨 条路径,它将 CPU 固定在 100% 几秒钟以完成一次绘制操作,并将所有这些点从 NSData 对象加载到CGPoint 值,然后再次释放它们(NSData 对象是正在绘制的点的压缩版本,存储从一个点到下一个点的增量,所以我将它保存在 RAM 中,但不保留实际的 CGPoints)。
它还将绘制的结果缓存在 UIImage 中,并保存在一个不会增长到超过 500KB 的先进先出数组中。
【问题讨论】:
【参考方案1】:Real Memory 数字包括您的应用已使用并已释放的内存块,但操作系统尚未费心回收或重用(但如果需要可以)。实时内存是“脏”内存,如果您的应用正在运行并且内存变得太紧,操作系统无法在不杀死您的应用的情况下回收它。
【讨论】:
谢谢。您知道在创建大量“脏”内存时是否存在严重的性能问题吗?我可以通过简单地消耗我当前内存使用量的两倍来创建一个 lot 更少脏内存,并且如果我收到内存不足警告,可以轻松地回退到“脏”方法。我有选择地将 250GB 数据库的一部分加载到 RAM 中。我可以在 RAM 中容纳的内存越多越好,但我需要性能以及高效的内存存储 我在任何地方都没有看到这个好的答案。知道这一点非常重要。【参考方案2】:原来我的问题是NSZombieEnabled
。
在 Edit Scheme > Run > Arguments > Environment Variables 中禁用它解决了额外的内存使用问题。
【讨论】:
以上是关于iOS 活动监视器中的实时字节与实际内存的主要内容,如果未能解决你的问题,请参考以下文章
sqlserver 2005 活动监视器中的等待类型的writelog问题