2009-03-09 1 views
3

私のC#コード用に作成されたil(偉大なLINQPadツールを使用してこれを行うことができます)を見れば、パフォーマンスのボトルネックになる可能性があるのは何ですか?生成されたILを使用して決定を下し、ボトルネックを探すにはどうすればよいですか?

コードを理解するためにIntermediate Intermediate Languageという本を読んだことがありますが、この情報を使用して意思決定や変更を行う方法について実際には説明していません。 ILを調べる

おかげ

答えて

5

は、コードの特定の行が意図しない副作用を引き起こしているものを絞り込むために良いですが、おそらく、パフォーマンスのボトルネックを追跡するためにあまり有用です。

代わりにその目的のためにプロファイラを使用することをおすすめします。理想的には、サンプリングとトレースプロファイラを実行します(非常に重要な場合)。プロファイラでボトルネックを見つけたら、ILを見て問題を解決するのに役立ちます。

しかし、通常、プロファイラの結果は問題を浮き彫りにしており、変更が必要なものはかなり明らかです。コードが明白でない場合は、ILそのものを調べることが役に立ちます。私がこれが有用であることがわかった唯一の場所は、コードが何度も実行されていることです(例えばタイトなループで)。あなたはコードブロックを書くための2つの異なるアプローチを比較することができ、どれが最も速く/最もコンパクトなILを生成するかを見ることができます。

また、必ずしもILから離れるとは限りません。ILよりも一見ゆっくりで(そしてより長い)ILは、ILをより単純に見ているよりも、JITでよりうまく処理できる場合があります。覚えておいて、ILは直接実行されません。実行前にコンパイル(最適化)されています。これは、サンプリングプロファイラが助けてくれるか、独自のタイミングをとることができる場所です。

しかし、ILを見ると、.netがどのように動作するかをより深く理解することができます。これは長期的には非常に貴重です。

+0

私はANTSを持っており、SQLクエリチューニングを実行します。私はILが私のコードをどこで改善できるかについて私に教えてくれるかどうかを見ることに全般的に興味があります。それと同様に、私は一般的に.NETがどのように動作するかを理解したいと思っています。 – dotnetdev

1

LINQPadは、LINQからSQL操作で生成されたSQLを分析するために使用されます。データベースのボトルネックやコードのパフォーマンスのボトルネックを探していますか?

データベースのボトルネックをトラブルシューティングする場合は、LINQPadを使用して生のSQLクエリを取得し、SQL Query Analyzerでチェックしてください。

コードパフォーマンスのボトルネックを探している場合は、Red GateのANTSのような.NETプロファイラを使用することをお勧めします。

+0

こんにちは、私はANTSがあり、SQLクエリのチューニングを実行します。 LINQPADについては、ILを非常に素早く見ることができるので、私は言いました。私は、コードのパフォーマンスのボトルネックを探しています。ちょうどILがいくつかのヒント(ボクシング/アンボクシングが発生している場所を教えてくれる以外)を与えると思っていました。 – dotnetdev

関連する問題