2013-09-16 4 views
5

私はMiniProfilerを使用してSQLコマンドをプロファイルしています。SqlBulkCopyが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); 
} 
+0

データは特別なTDSパケットとして送信されているが、私は 'BULKのINSERT'は、SQLを使用して開始されているかどうかわかりません。これは、SQLプロファイラではSQLとして表示されますが、それは偽の可能性があります。 – usr

+2

もっと一般的な 'CustomTiming'クラスを追加する[MiniProfiler 3.0](https://github.com/MiniProfiler/dotnet)に取り組んでいます。これは、一括コピーをプロファイルしてUIに表示させることを可能にします同じ方法で "sql"が行います。一度それが終わったら、私は例で答えるでしょう。 –

+0

@JarrodDixon:素晴らしい!タイムスケール(6〜8週間を超える)に関するアイデア? :) –

答えて

3

あなたはこれらのプロファイルにCustomTimingsを使用することができるはずです。これらはnew v3 versionに含まれています。現在はavailable on nugetです。

CustomTimingの使用例をthe sample projectに表示します。ここでは、httpイベントとredisイベントを記録します。

あなたはSqlBulkCopyとそれを使うことができる方法の例:

string sql = GetBulkCopySql(); // what should show up for the SqlBulkCopy event? 
using (MiniProfiler.Current.CustomTiming("SqlBulkCopy", sql)) 
{ 
    RunSqlBulkCopy(); // run the actual SqlBulkCopy operation 
} 
関連する問題