【问题标题】:swift 4 - get the memory size of arrayswift 4 - 获取数组的内存大小
【发布时间】:2018-09-10 14:03:13
【问题描述】:

我需要找出我刚刚下载的数组 (Swift 4 AnyObject) 的大小。每个移动设备都有一些可用内存(每个用户的大小不同),我需要一种方法来检查我的下载大小。我已经搜索并找不到合理的答案。希望你能帮忙!

【问题讨论】:

    标签: arrays swift size


    【解决方案1】:

    目前这似乎是不可能的。但如果只是粗略估计,可以使用class_getInstanceSize

    func size<T: AnyObject>(_ array: [T]) -> Int {
        return class_getInstanceSize(T.self) * array.count
    }
    

    对于这个示例数组

    class Test {
    
        var a: Bool = false
        var b: Int = 0
        var c: String = ""
    
    }
    
    let array = [Test(), Test(), Test()]
    

    您将获得 168 的尺寸。有关详细信息,请参阅 this post

    当然,这种方法不适用于可变长度的字段,例如字符串或数组。我看到获得准确值的唯一可能性是为每个可能的类编写一个函数来计算所需的确切字节数。例如,对于一个字符串,您可以使用

    计算字节数
    "test".data(using: .utf8)!.count
    

    但即使使用这种方法,您也无法获得 Swift 使用 内部 来存储数组的内存的实际大小。

    所以问题是:为什么需要知道数组的大小?您不知道下载数据大小的原因是什么?如果这些数据是从外部接收的,它们必须已经以字节表示形式编码,因此计数应该很容易。

    【讨论】:

    • 很高兴回复我的意图。每次用户读取或写入时,我使用 Firestore 都会花钱(我预计会有成千上万的用户)。这加起来我想削减成本,每个人的电话都不一样
    • 很高兴回复我的意图。每次用户读取或写入时,我使用 Firestore 都会花钱(我预计会有成千上万的用户)。这加起来,我想降低成本,每个人的电话都不一样,有些人比其他人有更多的内存。如果我想下载 10,000 或更多的项目,我需要知道我必须使用多少内存。理想情况下,我想下载一次,然后从内部存储器中读取。所有这一切都必须是动态的,我正在为有限的内存制定 B 计划,还有很多话要说,但这就是要点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多