1

ミニ プロファイラーのバージョン 1.9 で、非同期 DB 呼び出しの SQL タイミングをプロファイラーの結果に取得する方法を見つけました。基本的にContinueWith、非同期タスクに a を追加し、非同期アクションを開始したステップにすべての SQL タイミングを追加しました。

foreach (var sqlTiming in completedResult.SqlTimings)
{
    currentStep.AddSqlTiming(sqlTiming);
}

ただし、これは 2.0.2 では機能しなくなりました。これらの SQL タイミングは消えてしまいます。私が望むことを正確に実行する新しいメソッドがあるようです( source、487行目):

/// <summary>
/// Adds <paramref name="externalProfiler"/>'s <see cref="Timing"/> hierarchy to this profiler's current Timing step,
/// allowing other threads, remote calls, etc. to be profiled and joined into this profiling session.
/// </summary>
public static void AddProfilerResults(this MiniProfiler profiler, MiniProfiler externalProfiler)
{
    ...

だから、これが私が今すべきことのように見えます:

MiniProfiler.Current.AddProfilerResults(profilerFromAsyncTask);

ただし、エラーは発生しませんが、結果に何も追加されていないようです。次のコマンドを使用して、ステップに表示されるステップを取得できます。

currentStep.AddChild(profilerFromAsyncTask.Root)

ただし、それでも SQL のタイミングは破棄され、非同期タスクを開始するステップの時間がマイナスになります。

AddProfilerResults からの結果を SQL タイミングで表示するために必要なことはありますか?

4

1 に答える 1

1

Async は現在、ミニ プロファイラーで積極的にサポートまたはテストされているシナリオではありません。それを行うためのサポートされたメカニズムができるまで、私はそれをハッキングする方法を見つけるために掘り下げることを嫌います.次の変更でそのハックが蒸発するだけです. 長期的には、非同期は処理する必要があるものです。これまでのところ、非同期は必須ではありません。

プロジェクト サイトで提案を作成する (または既存の提案にコメントを追加する) のが最善の方法だと思います。あるいは、それを行うためのメカニズム (何かを壊したりリスクを冒したりすることなく機能する) を見つけて、変更セットを送信することもできます。

于 2012-07-17T10:30:17.143 に答える