2012-03-31 8 views

答えて

0

あなたは再生ボタンのように見える左上に実行ボタンがあります。それをクリックすると、ドロップダウンメニューが現れ、プロファイルを選択します。これにより、 "Instruments"が開き、 "Time Profiler"を選択できます。アプリがシミュレータで自動的に起動しない場合は、[レコード]をクリックします。

あなたのコードを見ることができるように、 "Hide System Libraries"と "Show Obj-C only"チェックボックスをチェックすることをお勧めします。

*関数をダブルクリックすると、少しのコードに費やす時間のパーセンテージが表示されますが、これは非常に便利です。

+0

私は "Time Profiler"について語っていませんでした。私はxcode 4.3でこれを見つけることができる "CPUサンプラー"について語っていました。 –

2

まず、必要なすべてのヘッダーファイルをインターフェイスファイルにインポートします。

#include <sys/sysctl.h> 
#include <sys/types.h> 
#include <mach/mach.h> 
#include <mach/processor_info.h> 
#include <mach/mach_host.h> 

processor_info_array_t cpuInfo, prevCpuInfo; 
mach_msg_type_number_t numCpuInfo, numPrevCpuInfo; 
unsigned numCPUs; 
NSLock *CPUUsageLock; 

と、実装ファイル内にあります。

- (void)cpuSampler:(NSTimer *)timer 
    { 
    natural_t numCPUsU = 0U; 
    kern_return_t err = host_processor_info(mach_host_self(), PROCESSOR_CPU_LOAD_INFO,&numCPUsU, &cpuInfo, &numCpuInfo); 
    if(err == KERN_SUCCESS) { 
      [CPUUsageLock lock]; 

      for(unsigned i = 0U; i < numCPUs; ++i) { 
       float inUse, total; 
       if(prevCpuInfo) { 
         inUse = (
        (cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER] - prevCpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER]) 
        + (cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM] - prevCpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM]) 
        + (cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE] - prevCpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE]) 
        ); 
        total = inUse + (cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE] - prevCpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE]); 
       } else { 
         inUse = cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER] + cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM] + cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE]; 
         total = inUse + cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE]; 
       } 
       if (i == 0) { 
       NSString *string0 = [NSString stringWithFormat:@"Core: %u Usage: %f%",i,(inUse/total)*100]; 
       } 
       if (i == 1) { 
       NSString *string1 = [NSString stringWithFormat:@"Core: %u Usage: %f%",i,(inUse/total)*100]; 
       } 
      } 
     [CPUUsageLock unlock]; 

    if(prevCpuInfo) { 
     size_t prevCpuInfoSize = sizeof(integer_t) * numPrevCpuInfo; 
     vm_deallocate(mach_task_self(), (vm_address_t)prevCpuInfo, prevCpuInfoSize); 
    } 

    prevCpuInfo = cpuInfo; 
    numPrevCpuInfo = numCpuInfo; 

    cpuInfo = NULL; 
    numCpuInfo = 0U; 
    } 
} 

NSlog string0とstring1の値がCPU測定値を知り、このメソッドをタイマーで呼び出すことができます。

1

サンプラー計測器では​​なく、タイムプロファイラ計測器を使用することができます。彼らは同様の情報を記録します。

iOS用のサンプラーを使用する必要がある場合は、OpenGL ESドライバテンプレートを選択します。 OpenGL ESドライバテンプレートには、Samplerインストゥルメントが含まれています。 OpenGL ESドライバテンプレートを選択した後、計測器リストからOpenGL ESドライバ計測器を選択し、Delete(Backspace)キーを押して計測器をドキュメントから削除します。

1

サンプラー・インストゥルメントは常にインストゥルメント内にあります。これを得るには、Instrumentsを起動し、空のプロファイリングセッションを使用するか、すでにSampler instrumentが入っているOpenGL ESドライバテンプレート(Markが示唆しているようなもの)から始めます。サンプラーインストゥルメントをテンプレートに追加するには、ライブラリツールバーのオプションをクリックし、サンプラーをテンプレートにドラッグします。

個人的には、this answerに記載されている理由から、私はタイムプロファイラーを使用することを好みます。

+0

Time ProfilerとCPU Samplerの違いは、関数を実行するために必要なCPU使用量ではなく、実行する関数 –

+0

@ZiadTamim - 上記のリンクされた回答で引用したInstrumentsのユーザーガイドの部分を読んでいますか?両者の違いはそれよりも微妙です。彼らは定期的にアプリケーションを停止し、その時点でスタックトレースをサンプリングします。両方とも、CPUに費やされた時間を何かによって測定します。これは、そのメソッドまたは関数によるCPU使用率を示す良い指標です。 –

関連する問題