Das „bremst“ im Titel steht ganz bewusst in Anführungszeichen, aber ein besserer Begriff ist mir für dieses Verhalten nicht eingefallen. Ich wollte heute eigentlich eine ganze einfache Datenbankoperation im Rahmen eines Programms implementieren. Es sollte einfach eine bestimmte Menge Datensätze generiert (ca. 1500) und in einer SQL Server Tabelle persistiert werden. Je nach Performanz des SQL Server eigentlich eine Sache von unter 1 Sekunde.
Allerdings kam mir dann IntelliTrace in die Quere bzw. hat dafür gesagt, dass die Datenbankoperation scheinbar mehr Zeit in Anspruch genommen hat, als ich vorher gedacht habe. Fairerweise muss ich sagen, dass ich mich mit IntelliTrace bis zu diesem Zeitpunkt noch nicht detailliert bis gar nicht auseinander gesetzt habe. Eine gute Einleitung in IntelliTrace bietet 1. Auf jeden Fall ist IntelliTrace seit 2010 ein Bestandteil von Visual Studio. Allerdings werden die IntelliTrace Information seit VS2015 nicht mehr in einem eigenen Fenster dargestellt, sondern sind jetzt in einem Tab in den Diagnostic Tools integriert.
Grundsätzlich gibt es die Möglichkeit mittels IntelliTrace alle Informationen zu sammeln und später zu filtern oder nur die Information zu sammeln, die einen konkret interessieren, und später nicht mehr filtern zu müssen. Genau dieser Umstand bzw. die Tatsache das hierbei bestimmte Defaults gesetzt hatzu dieser „Bremse“ geführt.
Der gesamte Code für dieses einfache Beispiel sieht wie folgt aus, wobei das wirklich nur ein Beispiel ist, um das Verhalten zu demonstrieren und so mit Sicherheit nicht für einen produktiven Einsatz gedacht/geeignet ist.
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Demo"].ConnectionString); conn.Open(); SqlTransaction trans = conn.BeginTransaction(); Console.WriteLine("Start: {0}", DateTime.Now); for (int i = 0; i < 2000; i++) { SqlCommand command = new SqlCommand(); command.Connection = conn; command.Transaction = trans; command.CommandText = "INSERT INTO dbo.OpenWeek (Id, CW, [User], Completed) VALUES ("+i+", 201611, 'Demo" + i + "', 0);"; command.ExecuteNonQuery(); } trans.Commit(); Console.WriteLine("Start: {0}", DateTime.Now); Console.WriteLine("Done"); Console.ReadKey(); |
Mit den Standardeinstellungen habe ich immer ungefähr die folgenden Zeiten erreicht.
In den Diagnostics Tools habe ich dann die folgenden Information gesehen:
Danach habe ich den Einstellungen von IntelliTrace sämtliche ADO.NET Events deaktiviert.
Danach sind die Zeiten entsprechend so, wie ich sie ursprünglich erwartet habe.
Da ich, wie Eingangs erwähnt, mich noch nicht im Detail mit IntelliTrace befasst hatte, hat mich erst 2 auf den richtigen Weg gebracht. Abschließend sei aber noch gesagt, dass einem IntelliTrace erst in die „Quere“ kommt, wenn man die Enterprise Edition einsetzt. In der Professional und Community Edition von Visual Studio ist dieses Feature nicht enthalten.
Falls jemand gerade kein VS2015 Enterprise Edition zur Hand hat und sich dieses Feature dennoch ansehen möchte, so gibt es unter 3 eine fertige virtuelle Maschine in der eine entsprechende Umgebung fertig eingerichtet ist. Weiterhin gibt es auch ein schönes Hands-On Lab 4, welches einem den Umgang mit IntelliTrace näher bringt.
source materials
- Understanding IntelliTrace Part I: What the @#$% is IntelliTrace? | The Ultimate Visual Studio Tips and Tricks Blog ↩
- asp.net – Why is DbContext.SaveChanges 10x slower in debug mode – Stack Overflow ↩
- Visual Studio 2015 ALM Virtual Machine and Hands-on-Labs / Demo Scripts ↩
- Hands-On Lab – Debugging with IntelliTrace using Visual Studio Enterprise 2015 ↩
Kommentare sind geschlossen.