- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个奇怪的内存问题,我在解决问题时遇到了问题,希望能得到一些关于其他地方的建议。
我的程序(iPhone 应用程序)有一个功能,它基本上可以下载大量文件,处理 JSON 文件,然后将其余部分存储到磁盘。 JSON 处理是 CPU 密集型的,每个文件可能需要几秒钟,所以我有一个 maxConcurrency 限制为 1 的 NSOperationQueue 来处理所有繁重的工作,还有一个队列来管理要下载的多个文件。
自从 iOS5 发布以来,应用程序在完成下载序列时遇到了问题而没有崩溃,到目前为止我已经尝试过;
1) 将 performSelectorOnBackgroundThread JSON 处理更改为使用单个 NSOperationQueue,以限制处理大型对象的后台线程数量。
2) 在创建多个大型 transient 对象的循环中添加了 NSAutoReleasePools。
3) 刷新 sharedURLCache 以确保文件不会在系统缓存中徘徊。
4) 使用 NSKeyedArchiver 将 JSON 对象存储到磁盘,并在线程之间传递文件名而不是实际对象,再次尝试减少当前正在使用的保留对象的数量和大小。
所有这些一开始似乎有所不同,当我查看内存分配时,我现在已经将峰值使用量从刚刚超过 20MB(因此它崩溃也就不足为奇了)降低到不到 10MB,但是该应用程序仍然像以前一样因内存不足而崩溃。
我正在尝试追踪导致应用程序崩溃的内存占用情况,在这种情况下,我在说服 Instruments 告诉我任何有用的信息时遇到了真正的问题。
这是典型的轨迹(在运行 iOS 4.3.5 的 iPhone 3GS 上)
您可以看到 PEAK 使用量略高于 7MB,但不久之后,您可以看到 2 个与内存不足相关的标志,然后是内存不足紧急标志,随后应用程序很快终止。
如果我使用内存监视器,崩溃的原因似乎很清楚——物理内存正在耗尽——看看下面的浅绿色痕迹。低内存警告与物理内存耗尽同时发生(不足为奇)。
也没有显示 FWIW 的泄漏(我在其他运行中也这样做过)。
这不是图像缓存或 NSURLConnection 缓存,我唯一能想到的是可能有一些未检测到的不良泄漏......但我在识别它们时遇到了问题,因为如果我点击所有分配查看事件的对象,然后执行 command-A 将它们全部选中(以便将它们粘贴到电子表格中以查看内存似乎在哪里),此时我按下 command-C 复制它们,仪器沙滩球,永远不会恢复。
我真的想不通这是怎么回事。有没有人对如何说服仪器向我显示一些有关使用此内存的更有用的信息有一些建议?
抱歉,我无法发布任何有意义的代码片段……希望仪器屏幕截图至少能让您了解我的来源。
最佳答案
Leaks 工具对于找出应用程序中明显的泄漏以外的任何东西都不是很有用。
您所描述的是堆快照分析的理想选择。
tl;博士 Heapshot analysis允许您准确查看应用程序的堆在任意两个时间点(您确定时间点)之间的增长情况。
关于ios - iPhone 内存警告和崩溃 - 但仪器显示低内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8316169/
检测 C# 代码的最简单方法是什么?我所说的检测是指插入我自己的代码片段以在执行期间收集一些动态信息。 例如(星号代表一些不重要的代码): for (int i=0; i。通过捕获方法调用,我的意思是
我有一个 javaagent,它可以打印出所有已加载类的名称及其来源(它们来自哪里)。 public byte[] transform(ClassLoader loader, String class
我可以使用命令行为单个设备/模拟器运行仪器,但我需要在两个设备上运行它。手动我可以通过打开 Instruments 的两个新窗口并制作两个 js 副本并导入它来实现这一点。但我需要使用命令行来实现这一
Closed. This question needs details or clarity。它当前不接受答案。
在 xcode 工具中测试我的 IOS 应用程序时,我有几次内存泄漏。谁能看出标有“-->”的行为什么会泄漏? --> CLLocationCoordinate2D newCoord = CLLoca
我正在尝试分析我的应用程序并想检查内存泄漏。我打算使用 Xcode 仪器。任何人都建议从 Xcode 仪器开始的好教程。请提出任何替代方案。 最佳答案 这里是教程列表,其中一些是文本文档和视频 关于仪
我正在我的 iOS 设备上运行应用程序,但在 Instruments 中,该设备显示为灰色。 这也意味着我无法附加流程 ( Cant launch iOS app with Instruments o
我正在使用工具“分配”来监视应用程序的内存。虚拟机跟踪器的统计数据让我很困惑。为什么有这么多脏内存(对于我的应用程序,达到32M),我用谷歌搜索了一下,知道当应用程序在后台模式下收到内存警告时,应该首
我正在关注 Ray Wenderlich tutorial for instruments ,但我不知道为什么分析没有显示泄漏的对象? - (void)tableView:(UITableView *
我目前正在开发一款 tvOS 应用。这是我的第一个原生 (Swift) 应用程序。该应用程序将是一个数字标牌应用程序,在事件期间或公司办公室使用。与 iOS/tvOS 上的典型应用程序相比,一个很大的
我正在应用程序上运行仪器。根据仪器,未检测到任何泄漏。 但是,类别CFString (store) 一直在上升。有谁知道 CFString (store) 是什么? 这是否意味着我有泄漏? 最佳答案
如何从命令行为 iOS 自动化 (iPhone/iPad) 运行 apple instruments?我看到一些博客说下面的命令 instruments -w -t /Developer/Platfo
当我从 SVN 检查测试脚本时(提交的文件我的 friend ),我不知道为什么脚本不可编辑,播放脚本和停止脚本选项被禁用并且记录不是一切都在发生。 当我创建一个新的自动化项目并导入相同的项目时脚本文
我的应用程序构建仅在运行仪器时崩溃。重现情况是 100%,但在没有仪器的情况下运行发布版本或运行调试版本时不会崩溃。当 Instruments 运行发布版本时,我无法单步执行并找出崩溃的确切原因。当构
在以前版本的 Instruments 中,我没有遇到任何问题,但现在(v6.2)由于某种原因,Allocations 不会列出我的应用程序的任何对象。我试过调试和 Release模式: 请注意,过滤器
我在我的 View Controller 上什么也没做,我看到了应用程序运行时正在变化的图表。 这真的是泄漏吗? 第一次显示绿色复选标记,然后显示 1 次泄漏,然后没有新的泄漏。 所以这意味着没有泄漏
我有一个 Android 项目(由 Cordova 生成),我想向其添加(检测)测试。它只有一个应该测试的 MainActivity.java。 通常这意味着向 build.gradle 添加一些依赖
我有内存问题(我正在使用 ARC),我确定我在应该是 weakstrong @property。我运行仪器,它向我展示了这个分配: 这显然是一个不发布的问题。但是我可以在 Instruments 中找
我正在使用时间分析器分析我的 WatchKit 扩展应用程序,但轨迹是未符号化的: 我的意思是这些对我来说都是无关的符号,我找不到我的方法名称。如果我点击这些符号中的任何一个,我就可以看到汇编代码。如
我正在使用仪器来分析我正在开发的 iPhone 应用程序中的内存使用情况。我想知道,什么是合理的内存分配大小? 当我获得关于我的目标的信息时,我是否应该选中忽略“NS”、“CF”和“Malloc”前缀
我是一名优秀的程序员,十分优秀!