Ich habe eine C# .NET 4.5 Konsole Anwendung mit Entity Framework 6.1 und Ich verwende das Muster der Arbeitseinheit. Ein typisches Beispiel für Code, wo ich einen Eintrag in meiner tblFills Tabelle hinzuzufügen:Die Verwendung von lokalen sqlexpress mit EF beschleunigt die Leistung mehr als erwartet. Warum?
var fillRep = UnitOfWork.Instance.GetRepository<tblFills>();
fillRep.Add(fill);
UnitOfWork.Instance.Commit();
Einer meiner Simulationen macht 900 Datenbank schreibt.
Mit einem Remote-Server (Hosting von SQL Server auf einem Remote-Cloud-Server) dauert meine Simulation 6:21 Minuten (6 Minuten, 21 Sekunden). Das sind durchschnittlich 25 Sekunden pro Transaktion (es macht auch andere Dinge). Am Anfang von meinem Code, mache ich 10 Datenbank schreibt in eine Dummy-Tabelle, um es zu Zeit ... dann um 10 zu teilen, um meine durchschnittliche Datenbankzugriffszeit zu erhalten. Diese Simulation zeigte eine Zugriffszeit von 61 ms.
Meine Leistung Testcode:
Private void SqlPerformanceTest()
{
Logger.Debug("Starting SQL Performance Test...");
int iterations = 10;
TempPerformance tp = new TempPerformance();
tp.Quantity = 10;
TimeSpan startTime = DateTime.Now.TimeOfDay;
for (int i = 0; i < iterations; i++)
{
UnitOfWork.Instance.GetRepository<TempPerformance>().Add(tp);
UnitOfWork.Instance.Commit();
}
DateTime elapsedTime = DateTime.Now.Subtract(startTime);
Logger.Debug("Done. Average SQL access for adding entires is: {0} ms", elapsedTime.TimeOfDay.TotalMilliseconds/iterations);
}
ich dann meine Verbindungszeichenfolge zu einer lokalen SQLEXPRESS Instanz wechseln, ich habe laufen und meine Simulationszeit geht von mehr als 6 Minuten und 10 Sekunden.
Dies macht für mich keinen Sinn, da ich glaube, dass meine Datenbankzugriffszeiten der einzige Unterschied in den beiden Simulationen sind.
Kann mir jemand helfen zu verstehen?
Zusammenfassend: 1) Mit der externen Datenbank mit Datenbankzugriffszeiten von 61 ms, 900 Datensätze in die Datenbank, dauert die Simulation über 6 Minuten. 2) Bei Verwendung der lokalen Datenbank dauert die Simulation 10 Sekunden.
Jede Hilfe oder Hinweise würde wirklich geschätzt werden.
Mein Remoteserver führt SQL Server 2014 auf einem Windows 2008 Server R2 Datacenter aus. Ich denke nicht, dass das wichtig ist, da ich die Zugriffszeiten gemessen habe, aber ich dachte, ich würde es erwähnen.
Dank -Ed
Vielen Dank. Ich denke, ich verstehe Ihre Antwort ... würde die 61ms Round-Trip-Messung, die ich oben gemacht habe, nicht genau das messen: Server + SQL-Latenz? Aber ich stimme Ihrer letzten Aussage zu, dass ich versuchen werde, app + db auf dem gleichen Server zu implementieren, obwohl ich irgendwie einen Spiegel brauche ... –