gpt4 book ai didi

ios - ios:读取大文件时的内存使用情况

转载 作者:行者123 更新时间:2023-12-01 19:59:16 28 4
gpt4 key购买 nike

我需要在我的iOS应用程序中导入一些文件,然后将数据转发到另一层(通过MessagePack)。

导入的文件可能很大,因此我无法将其完全加载到内存中,因此必须按块读取和转发。
为此,我使用了NSInputStream,每次它给我一些数据时,我都会打包并转发。
但是奇怪的是,这样做并不会改变进程的内存使用情况,就好像立即注意到要释放的数据块一样。

可以通过这段代码来模拟该过程,在该代码中,我创建随机数据并提取其字节(这是MessagePack包装的主要部分,使用内存):

for(int i = 0; i < 200; i++) {
NSData *theData = [self generateRandomData];
const char *buf = ((NSData*)theData).bytes;
}

内存使用量激增,达到约450MB( generateRandomData创建2MB的数据),然后在 for循环结束后减小到常规水平。

我本以为 buf变量应该在每次循环迭代后释放,因此内存使用率永远不会很高。

为什么不这样呢?我想念什么吗?

那我该如何导入一个大文件呢?我正在考虑在此过程中稍作休息(每100MB导入一次左右),以减少内存使用量,但这对我来说似乎并不理想。

最佳答案

我的应用程序中的内存使用率达到600 mb时也遇到了同样的问题,然后我使用自动释放池手动释放了内存。

    for(int i = 0; i < 200; i++) 
{
NSData *theData = [self generateRandomData];

@autoreleasepool {
const char *buf = ((NSData*)theData).bytes;
}

}

创建一个自动释放池,然后检查您的内存利用率。希望这对您有所帮助。

关于ios - ios:读取大文件时的内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40717382/

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