Вывод в консоль размера используемой памяти iOS Swift

Если в процессе разработки iOS приложения или любого другого приложения потребуется выяснить какое количество памяти используется в данный момент, то можно использовать следующую функцию:

//
// proSwift.ru
//

func report_memory() {
    var info = mach_task_basic_info()
    var count = mach_msg_type_number_t(MemoryLayout<mach_task_basic_info>.size)/4
    
    let kerr: kern_return_t = withUnsafeMutablePointer(to: &info) {
        $0.withMemoryRebound(to: integer_t.self, capacity: 1) {
            task_info(mach_task_self_,
                      task_flavor_t(MACH_TASK_BASIC_INFO),
                      $0,
                      &count)
        }
    }
    
    if kerr == KERN_SUCCESS {
        print("Memory in use (in bytes): \(info.resident_size)")
    }
    else {
        print("Error with task_info(): " +
            (String(cString: mach_error_string(kerr), encoding: String.Encoding.ascii) ?? "unknown error"))
    }
}

Попробуем в деле нашу функцию. Только я использовал для удобного отображения размера памяти еще и разделитель триад из предыдущей статьи.

//
// proSwift.ru
//

print("Memory in use (in bytes): \(info.resident_size.formattedWithSeparator)")

Выполним цикл, в котором сто раз создадим массив из случайного числа, а также каждый шаг цикла будем вызывать написанную нами функцию report_memory()

//
// proSwift.ru
//

for i in 1...100 {
    let n = [arc4random_uniform(999999)]
    report_memory()
}

Моя консоль выглядит так:

Memory in use (in bytes): 36 950 016
Memory in use (in bytes): 36 954 112
Memory in use (in bytes): 36 966 400
Memory in use (in bytes): 36 978 688
Memory in use (in bytes): 36 982 784
Memory in use (in bytes): 36 990 976
Memory in use (in bytes): 37 003 264
Memory in use (in bytes): 37 011 456
Memory in use (in bytes): 37 019 648
Memory in use (in bytes): 37 027 840
Memory in use (in bytes): 37 031 936
Memory in use (in bytes): 37 044 224
Memory in use (in bytes): 37 052 416
Memory in use (in bytes): 37 060 608
Memory in use (in bytes): 37 072 896
Memory in use (in bytes): 37 076 992
Memory in use (in bytes): 37 097 472
Memory in use (in bytes): 37 105 664
Memory in use (in bytes): 37 117 952

 




 

Добавить комментарий

Ваш адрес email не будет опубликован.

*

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.