12

asp.net Web API プロジェクトでミニ プロファイラーを使用しており、カスタム DelegatingHandler で実行される一部のコードのパフォーマンスを追跡したいと考えています。

MiniProfiler.Current.Step()内の呼び出しDelegatingHandlerは結果に表示されません。同じプロジェクト内の他の呼び出しは正常に表示されます。

さらなる調査により、MiniProfiler.Currentが から取得されたものであることが明らかになりHttpContext.CurrentましたWebRequestProfilerProvider。AndHttpContext.Currentから呼び出された場合は null DelegatingHandlerです。

ハンドラー内で動作するように MiniProfiler.Current を取得するより良い方法はありますか?

4

1 に答える 1

4

MiniProfiler Timings はHttpContext.Currentデフォルトで保存されます (発見したとおり)。したがって、が null の場所から MiniProfiler を呼び出すとHttpContxt.Current、結果を保存できません。解決策は、別の場所から結果を保存 (および取得) することです。

MiniProfiler には、すべての結果を保存および取得する場所を変更するオプションが用意されています ( を使用MiniProfiler.Settings.Storage)。新しい v3 MiniProfiler ( beta nuget hereIStorage ) は、リクエストごとに異なる構成のオプションを提供し、 を使用して結果MultiStorageProviderを保存および取得できる複数の場所を指定します。この例は、github のSample.Mvcプロジェクトで確認できます。

あなたの場合、最善のアプローチは、最初に保存/取得するMultiStorageProviderグローバルに を設定し、その後からアクセスできる他のものを使用することです。次に、で設定した 2 番目のストレージ オプションのみを使用するように を設定します(HttpCache を保存しようとしても意味がないため)。これにより、 からのプロファイルが2 番目のストレージ オプションに保存され、他の結果と一緒に表示するために取得されます (取得できる最初の場所からの結果になるため、HttpCache で結果が見つからない場合、 2番目のオプションに進みます。MiniProfiler.Settings.StorageHttpRuntimeCacheStorageIStorageDelegatingHandlerDelegatingHandlerMiniProfiler.Current.StorageMultiStorageProviderDelegatingHandlerMultiStorageProviderLoad

注 - この場合、複数のストレージ オプションを使用すると便利ですが、プロファイル取得のパフォーマンスに悪影響を及ぼす可能性があります。

于 2014-02-15T21:12:29.013 に答える