gpt4 book ai didi

ios - 以编程方式获取 iOS 应用程序中的内存使用情况 Live/Dirty Bytes(不是 Resident/Real Bytes)

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:53:22 26 4
gpt4 key购买 nike

根据我目前所读到的内容,实际/驻留字节表示分配给应用程序的字节数,包括应用程序不再使用但尚未被操作系统回收的字节数。事件/脏字节是应用程序实际使用的字节,操作系统无法回收。我认为 XCode Debug navigator 中显示的数字是 Live Bytes。

我有兴趣以编程方式获取这个数字(用于我们自己的统计/分析),但我发现的代码只能给出驻留字节的值,这比 Xcode 在某些设备上显示的值大(几乎两倍大),实际上是在相同的设备上,但 iOS 版本不同。 (在 iOS 9 上,它给出的值几乎是 Xcode 的两倍,但在 iOS 11 上,它给出的值几乎与 Xcode 相同)。

我使用的代码是这样的:

struct mach_task_basic_info info;
mach_msg_type_number_t size = MACH_TASK_BASIC_INFO_COUNT;
kern_return_t kerr = task_info(mach_task_self(),
MACH_TASK_BASIC_INFO,
(task_info_t)&info,
&size);
if( kerr == KERN_SUCCESS ) {
NSLog(@"Memory in use (in bytes): %u", info.resident_size);
return info.resident_size;
} else {
NSLog(@"Error with task_info(): %s", mach_error_string(kerr));
}

是否有一些代码可以像 Xcode 显示的那样获取事件字节值?

最佳答案

我发现了其他东西,但它似乎在以前的方法不起作用的设备上工作,并且在以前的方法工作的设备上不起作用:-(现在我需要弄清楚如何知道使用哪一个。一台设备是装有 iOS 9 的 iPhone 5s,另一台是装有 iOS 11 的 iPhone 5s。我想我需要在更多设备上进行测试......

我在这里找到的:

https://opensource.apple.com/source/WebKit/WebKit-7603.1.30.1.33/ios/Misc/MemoryMeasure.mm.auto.html

这在 Objective-C 中被翻译成类似这样的东西:

task_vm_info_data_t vmInfo;
mach_msg_type_number_t count = TASK_VM_INFO_COUNT;
kern_return_t err = task_info(mach_task_self(), TASK_VM_INFO, (task_info_t) &vmInfo, &count);
if (err != KERN_SUCCESS)
return 0;

NSLog(@"Memory in use vmInfo.internal (in bytes): %u", vmInfo.internal);

return vmInfo.internal;

我想如果我添加 vmInfo.internal 和 vmInfo.compressed 那么我会得到正确的结果(匹配 Xcode 调试导航器显示的内容)

到目前为止,这两款设备以及我测试过的另外 2 款设备看起来都不错。

所以我的最终代码是这样的:

task_vm_info_data_t info;
mach_msg_type_number_t size = TASK_VM_INFO_COUNT;
kern_return_t kerr = task_info(mach_task_self(),
TASK_VM_INFO,
(task_info_t)&info,
&size);
if( kerr == KERN_SUCCESS ) {
mach_vm_size_t totalSize = info.internal + info.compressed;
NSLog(@"Memory in use (in bytes): %u", totalSize);
return totalSize;
} else {
NSLog(@"Error with task_info(): %s", mach_error_string(kerr));
}

关于ios - 以编程方式获取 iOS 应用程序中的内存使用情况 Live/Dirty Bytes(不是 Resident/Real Bytes),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48990831/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com