5

MiniProfiler を使用して、SQL コマンドのプロファイルを作成しています。

私が現在取り組んでいる問題の 1 つは、linq によって生成された INSERT ステートメントの繰り返しです。

それらをコマンドに変換しましたがSqlBulkCopy、MiniProfiler の sql ビューに記録されていないようです。

SqlBulkCopy に関連するコマンド文字列さえありますか?

SQL コマンドのリストに一括コピーを表示することはできますか?

少なくとも % sql ビットでカウントすることはできますか?


使用できることは承知していますMiniProfiler.Current.Step("Doing Bulk Copy")が、それは SQL としてカウントされず、リストに詳細が表示されません。


以下の現在のコード:

public static void BulkInsertAll<T>(this DataContext dc, IEnumerable<T> entities)
{
    var conn = (dc.Connection as ProfiledDbConnection).InnerConnection as SqlConnection;
    conn.Open();

    Type t = typeof(T);

    var tableAttribute = (TableAttribute)t.GetCustomAttributes(
        typeof(TableAttribute), false).Single();
    var bulkCopy = new SqlBulkCopy(conn)
    {
        DestinationTableName = tableAttribute.Name
    };

    //....

    bulkCopy.WriteToServer(table);
}
4

1 に答える 1

4

これらをプロファイリングするために使用できるはずですCustomTimings。これらは、現在nuget で利用できる新しい v3 バージョンに含まれています。

これが http および redis イベントを記録するために使用されるサンプル プロジェクトでCustomTimingいくつかの使用例を見ることができます。

で使用する方法の例SqlBulkCopy:

string sql = GetBulkCopySql(); // what should show up for the SqlBulkCopy event?
using (MiniProfiler.Current.CustomTiming("SqlBulkCopy", sql)) 
{
  RunSqlBulkCopy(); // run the actual SqlBulkCopy operation
}
于 2014-02-15T19:08:59.820 に答える