2011-06-28 3 views
3

私はプロファイリングウェブアプリを持つ初心者です。プロフィールログファイルがあれば、どの情報を入手できますか?どのように私は私のアプリをより速くするために取り組む必要があるかを知ることができます。
は私がどのように解釈するか分からない、このサンプルZendのアプリケーションのインデックスページのプロフィールを持っている:私のzend Webアプリケーションのプロファイリングログを解釈するにはどうすればよいですか?

enter image description here

+0

私はこの質問があまりにもオープンエンドであるかもしれないと思う。しかし、私が知っているから**私は**ここでは良い答えの恩恵を受けるだろう**。 ;-) –

+0

プロファイリングデータを解釈する方法を説明する書籍やリソースを知っていますか? –

+0

悲しいことに、私はそうではありません。 ;-( –

答えて

1

必要な数は累計時間である - (自身の)倍、呼び出し回数、自己を無視し、と平均時間。

累積時間の長いルーチンを見つけ、呼び出す関数が少なくて済みます。 特にこれらの関数がI/Oを行う場合。

もう1つの方法は、スクリプトを手動で中断し、手動で呼び出しスタックを記録することです。 これらのスタックサンプルを注意深く見てみると、ほとんどの場合、どのコード行が流出しているのかが正確にわかります。 More on that.

1

最初にするべきことは、兼ねて結果を並べ替えることです。最大のボトルネックは、最長のものです。次に、掘り下げてそのルーチンが何をしているのかを見て、他のメソッドを含むループを見つけようとします。それらのネストされたメソッドのヒットカウント(呼び出し)とそれらが取った時間を見てください。

例えば、MyFuncが最長の時間を費やしているとすれば、それを調べるとループがあることがわかります。ループ内で、MyOtherFuncがループ内で呼び出されているのを見て、再度テーブルを見て、MyOtherFuncを参照してください。それは200回呼ばれた? MyOtherFuncをループから外すことができるかどうかを調べます(入力として変数を変更する必要がありますか?)。

FOR (MyVar = 0 TO GetItems().Count) { 
    print GetItems()[MyVar].Name; 
} 

のgetItemsは100個のアイテムを返す場合、メソッドのgetItemsが呼び出される200回:

は、擬似コードの例では、これを見れば。プロファイラは、このような欠陥を高いヒット数で指摘します。したがって、結果をローカル変数にキャッシュします:

var TempVar = GetItems(); 
FOR (MyVar = 0 TO TempVar.Count) { 
    print TempVar[MyVar].Name; 
} 

これで1回だけ呼び出されます。もう一度プロフィールを作成し、結果を比較してください。

警告:プロファイルを作成すると、中毒性が増します。

関連する問題