6

ミニプロファイラーを使用する場合、これは、ブロックを使用するとプロダクションコードが「散らかる」ことを意味しますか?

using (profiler.Step("Set page title"))
{
    ViewBag.Title = "Home Page";
}

1回限りのテストであれば削除できると思いますが、通常は、一定のプロファイリングのためにこれらをコードベースに保持する必要があります。

4

1 に答える 1

9

これは実際には悪い例です。通常、些細なことをプロファイリングすることはありません。

最終的に、それはあなたがプロファイリングしたいものを選択的にします。ADO.NETのようなものにはフックがありますが、これ以外のものをプロファイリングしたい場合は、そうです。手を差し伸べる必要があります。

再「散らかった」、まあ、それは主観的です。そして、最善のアプローチは、通常、インストルメンテーションを非常に高レベルの操作に制限し、必要に応じて(特定された問題箇所のために)より詳細な操作でのみズームインすることです。たとえば、次のようになります。

...
using(profiler.Step("Refresh customer"))
{
    // ...
}
...

そして、1800msのズームインを見つけた場合にのみ:

...
using(profiler.Step("Refresh customer"))
{
    using(profiler.Step("Query LDAP"))
    { ... }
    using(profiler.Step("Query primary customer DB"))
    { ... }
    using(profiler.Step("Query aux db"))
    { ... }
    using(profiler.Step("Print, scan, and OCR"))
    { ... }
}
...

.Inline(...)個々のコマンドの方法もあります。

これが「ポイ捨て」だと思うかどうか:

  • それはパフォーマンスが機能であることを強調しています(そして実際、多くの場合要件です)-あなたの機能をサポートするコードを持っていても大丈夫です!実際、これは、新しい/変更されたコードのパフォーマンスを検討(および測定)したという証拠の形式です。
  • それはあなたがそれをどれだけきめ細かくするか完全に文脈的です
  • したがって、ユーザーに意味のある詳細レベルを提供します。ログに異常な量の雑学クイズがなく、ほとんどのログのパフォーマンスを侵害する性質がありません。
于 2011-08-16T19:57:17.537 に答える