2013-09-16 11 views
5

Ich verwende MiniProfiler, um meine SQL-Befehle zu profilieren.SqlBulkCopy wird als sql in MiniProfiler angezeigt

Ein Problem, mit dem ich es jetzt zu tun habe, sind wiederholte INSERT-Anweisungen, die von linq generiert werden.

Ich habe sie in einen SqlBulkCopy Befehl umgewandelt, aber jetzt scheint es nicht in der SQL-Ansicht in MiniProfiler aufzuzeichnen.

Würde es sogar eine zugehörige Befehlszeichenfolge für eine SqlBulkCopy geben?

Ist es möglich, dass die Massenkopie in der Liste der SQL-Befehle angezeigt wird?

Kann ich es zumindest im% sql Bit zählen lassen?


Ich bin mir bewusst, ich MiniProfiler.Current.Step("Doing Bulk Copy") verwenden könnte, aber das wäre wie SQL nicht zählen, und würde in der Auflistung mit jedem Detail nicht zeigen.


Aktuelle Code unten:

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

Die Daten gesendet werden als spezielle TDS-Pakete, aber ich weiß nicht, ob die 'BULK INSERT' mit SQL eingeleitet wird. Es erscheint in SQL Profiler als SQL, aber das kann falsch sein. – usr

+2

Ich arbeite an [MiniProfiler 3.0] (https://github.com/MiniProfiler/dotnet), das eine generische 'CustomTiming' Klasse hinzufügt, die es erlaubt, die" Massenkopie "zu profilieren und sie in der Benutzeroberfläche anzeigen zu lassen genauso wie "sql". Sobald es draußen ist, werde ich mit einem Beispiel antworten. –

+0

@JarrodDixon: Großartig! Irgendeine Idee auf Zeitskala (über 6-8 Wochen)? :) –

Antwort

3

sollten Sie in der Lage sein CustomTimings zu verwenden, um diese zu profilieren. Diese sind in der new v3 version enthalten, die jetzt available on nuget ist.

Sie können einige Beispielverwendungen von CustomTiming in the sample project sehen, wo dies zum Aufzeichnen von HTTP- und Redis-Ereignissen verwendet wird.

Ein Beispiel, wie Sie es mit SqlBulkCopy verwenden:

string sql = GetBulkCopySql(); // what should show up for the SqlBulkCopy event? 
using (MiniProfiler.Current.CustomTiming("SqlBulkCopy", sql)) 
{ 
    RunSqlBulkCopy(); // run the actual SqlBulkCopy operation 
} 
Verwandte Themen