【问题标题】:Is there any performance difference between creating an NSFileHandle for a large versus a small file?为大文件和小文件创建 NSFileHandle 之间是否存在性能差异?
【发布时间】:2012-11-02 04:59:36
【问题描述】:

这个问题让我觉得几乎是愚蠢的,但我只是想检查一下自己的理智。出于各种原因,我将一堆文件合并为一个单独的巨型文件,然后将其作为资源打包到我的 iOS 应用程序中。然后我使用 NSFileHandle 打开文件,寻找正确的位置,然后只读出我想要的字节。

这样做与读取松散文件之间有什么性能差异吗?或者,假设我可以选择只使用一个单一的巨型文件,而不是 10 个中等大小(但仍然连接)的文件,“打开”大文件和小文件之间是否存在性能差异?

由于我确切地知道要查找的位置,并且我只读取我想要的字节,所以我看不出会有什么不同。但是,嘿 - 事实证明是奇怪的事情。提前致谢!

【问题讨论】:

    标签: objective-c ios nsfilehandle


    【解决方案1】:

    如果文件数量非常多,可能会有所不同。每个打开的文件都会占用内存中的资源(文件句柄等),并且在某些存储设备上,一个文件即使没有填满也会占用整个块。在极端情况下,这可能会导致空间浪费。但在实践中,这可能不会成为问题。要确定,您可以分析您的代码并查看其中一种方式是否比另一种方式更快,并查看它在典型设备上占用的空间类型。

    【讨论】:

    • 感谢您的回复。因此,这些听起来都像是支持使用连接文件而不是松散文件的论据。我能想到的唯一另一个问题是,如果您有多个线程需要同时访问单一资源文件,那么在谁是该文件句柄的所有者方面可能会发生冲突。就我而言,对它的所有访问都将连续发生。不过要明确一点,为 1MB 文件创建文件句柄与为 50MB 文件创建文件句柄之间肯定没有内存差异,对吧?
    • 我不知道。据我所知,文件的大小不会影响内存中文件句柄的大小。但是,如果您想同时访问所有 50 个 1MB 文件,则内存中需要 50 个文件句柄。
    猜你喜欢
    • 2021-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 2012-03-05
    • 2014-11-24
    • 2017-12-22
    • 2014-05-17
    相关资源
    最近更新 更多