2013-09-16 10 views
5

Używam programu MiniProfiler do profilowania moich poleceń sql.Uzyskiwanie SqlBulkCopy do wyświetlenia jako sql w MiniProfilatorze

Jednym z problemów, z którymi mam do czynienia, jest powtarzanie instrukcji INSERT generowanych przez linq.

Przekształciłem je w komendę SqlBulkCopy, ale teraz nie wydaje się, aby było ono nagrane w widoku sql w programie MiniProfiler.

Czy istnieje nawet skojarzony ciąg poleceń dla SqlBulkCopy?

Czy można uzyskać masową kopię, aby pojawiła się na liście poleceń sql?

Czy mogę przynajmniej sprawić, aby było policzone w bicie% sql?


Jestem świadomy mogę użyć MiniProfiler.Current.Step("Doing Bulk Copy") ale nie liczyłbym jak SQL, a nie pokazują w zestawieniu z każdym szczególe.


Aktualny kod poniżej:

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

Dane są wysyłane jako specjalne pakiety TDS, ale nie wiem, czy 'BULK INSERT' jest inicjowana za pomocą SQL. Pojawia się w SQL Profiler jako SQL, ale to może być fałszywe. – usr

+2

Pracuję nad programem [MiniProfiler 3.0] (https://github.com/MiniProfiler/dotnet), który dodaje bardziej ogólną klasę 'CustomTiming', umożliwiając profilowanie" kopii zbiorczej "i wyświetlanie jej w interfejsie użytkownika w ten sam sposób, co "sql". Gdy to się skończy, odpowiem na przykład. –

+0

@JarrodDixon: Świetnie! Masz pojęcie o skali czasowej (powyżej 6-8 tygodni)? :) –

Odpowiedz

3

Powinieneś być w stanie wykorzystać CustomTimings do profilu nich. Są one zawarte w new v3 version, która jest teraz available on nuget.

Możesz zobaczyć przykładowe zastosowania CustomTiming w the sample project, gdzie służy do rejestrowania zdarzeń http i redis.

Przykładem, jak można go używać z SqlBulkCopy:

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