Laden...

EF6 Performance verbessern

Erstellt von Coooder vor 9 Jahren Letzter Beitrag vor 9 Jahren 2.048 Views
C
Coooder Themenstarter:in
180 Beiträge seit 2011
vor 9 Jahren
EF6 Performance verbessern

Hi leute,

ich probiere gerade ein wenig mit dem Entity Framework rum und habe per button click einen Datensatz in eine Tabelle geschrieben. Dies kam mir jedoch sehr sehr langsam vor, weswegen ich mal die zeit gestoppt hab

private void Button_Click(object sender, RoutedEventArgs e)
		{
			Stopwatch s1 = new Stopwatch();
			s1.Start();
			_vm.AddEntry();
			s1.Stop();		
		}
public void AddEntry()
		{


			using (HSDODatabaseEntities ent = new HSDODatabaseEntities()) {
				PlayerClass pc = new PlayerClass();
				pc.NameDe = "ein test";
				pc.NameEn = "a test";
				ent.PlayerClasses.Add(pc);
				ent.SaveChanges();
			}
		}

Die Stop uhr sagt mir das er dafür ungefähr 1,16 Sekunden braucht um den Datensatz anzulegen.
Das erscheint mir arg lang ... Ist das normal oder kann ich da noch was dran machen?

16.835 Beiträge seit 2008
vor 9 Jahren

Schau nach, welche Methode genau so lange braucht.
Miss Methode für Methode.

Und: schau Dir mal den Repository Pattern an.
Jedes mal einen Context zu erstellen, wenn man nur ein Add() ausführen will ist natürlich kontraproduktiv.

In meinem Blog ORM-Wahl fürs Web: Entity Framework+MSSQL oder MongoDB? vergleiche ich ja die Performance; und EF ist nicht "perfekt" - aber mit 10 Entries /s weit aus schneller als Dein Wert.

Gleich eins Vorweg:
Cultures haben i.d.R. in Entitäten recht wenig zutun.
Überleg Dir also, ob Du DE und EN-Angelegenheiten nicht anders umsetzen kannst. Sowas bläht ein System schnell (unnötig) auf.

2.207 Beiträge seit 2011
vor 9 Jahren

Hallo Coooder,

es gibt unzählige Lösungen für das Repo-pattern / UnitOfWork für das EF. (Auch bei mir im NuGet in der Signatur).

Benutz es und miss mal die Zeit damit. Ich kann mir nicht vorstellen, dass es jedesmal 1,16 Sekunden dauert einen Datensatz hinzuzufügen. Mach das mal mit 10000 Datensätzen und dann ein SaveChanges() und die Zeit durch eben die Anzahl teilen. Einfach irgendwas, damit man mal realistischere Werte bekommt.

Gruss

Coffeebean

W
955 Beiträge seit 2010
vor 9 Jahren

Hallo

ist das nur beim ersten mal so? Da muß er das Mapping laden. Wieviele Tabellen?

C
Coooder Themenstarter:in
180 Beiträge seit 2011
vor 9 Jahren

Vielen dank für die schnellen Antworten!

Das Pattern werd ich mir bei Zeiten mal angucken! Und ja das mit den Sprachen sollte ich wirklich anders lösen, da hast du Recht.

Hallo

ist das nur beim ersten mal so? Da muß er das Mapping laden. Wieviele Tabellen?

Wie recht du hast! Ja es war nur beim ersten mal so! Danach gehts wesentlich schneller ...
Vielen dank für den Hinweis!

Hinweis von Abt vor 9 Jahren

[Hinweis] Wie poste ich richtig? 2.3 - bitte keine Fullquotes mehr. Bist lang genug dabei, dass Du das wissen müsstest 😉