objective-c - iPhone如何用程式設計檢索記憶體使用?
ringa_lee
ringa_lee 2017-04-21 11:18:53
0
1
665

我想以編程的方式隨時檢索iPhone App的內存使用量。是的,我注意到了ObjectAlloc/Leaks。但我對那些不感興趣,隻想知道是否可以通過寫代碼來獲取所使用的字節量,並通過NSLog報告。
謝謝!

原問題:Programmatically retrieve memory usage on iPhone

ringa_lee
ringa_lee

ringa_lee

全部回覆(1)
小葫芦

Jason Coco:
為了獲得App實際使用的記憶體字節,你可以使用下述方式。但是,你必須要熟練各種分析工具,就像它們設計了更好看的表示整體使用的圖片一樣。

#import <mach/mach.h>

// ...

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

info.virtual_size中有個欄位可以告訴你可用的虛擬記憶體的具體位元組數(或任何情況下記憶體分配給App的潛在虛擬記憶體)。 Pgb連結的程式碼將為你提供裝置的可用記憶體和記憶體類型。


Douglas K. Bell:
這是加強後的report_memory(),可以在NSLog()中迅速顯示記憶體洩漏。

void report_memory(void) {
    static unsigned last_resident_size=0;
    static unsigned greatest = 0;
    static unsigned last_greatest = 0;

    struct task_basic_info info;
    mach_msg_type_number_t size = sizeof(info);
    kern_return_t kerr = task_info(mach_task_self(),
                               TASK_BASIC_INFO,
                               (task_info_t)&info,
                               &size);
    if( kerr == KERN_SUCCESS ) {
        int diff = (int)info.resident_size - (int)last_resident_size;
        unsigned latest = info.resident_size;
        if( latest > greatest   )   greatest = latest;  // track greatest mem usage
        int greatest_diff = greatest - last_greatest;
        int latest_greatest_diff = latest - greatest;
        NSLog(@"Mem: %10u (%10d) : %10d :   greatest: %10u (%d)", info.resident_size, diff,
          latest_greatest_diff,
          greatest, greatest_diff  );
    } else {
        NSLog(@"Error with task_info(): %s", mach_error_string(kerr));
    }
    last_resident_size = info.resident_size;
    last_greatest = greatest;
}
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板