Diskuze: Entity Framework - rychlost

C# .NET .NET (C# a Visual Basic) Entity Framework - rychlost American English version English version

Aktivity (1)
Avatar
Luboš Štěpnička:17. července 8:07

Ahoj, vytvářím databázovou aplikaci s pomocí entity frameworku a narazil sem na problém. Tím problémem je rychlost při načtení prvního vyhledání.
Mám aplikaci, která stahuje informace o zákazníkovi a zobrazuje je ve formuláři. Při prvním vyhledání aplikace na mém stroji trvá 1-2 sekundy, zjistil sem však, že na starších strojích...cca 2-3 roky staré ntb. co máme ve firmě je ten čas 4-8 sekund (což už je strašně moc). Všechna následná vyhledání jsou i na starých strojích v rámci 1 sekundy. Chápu, že se při prvním vyhledání načte model atd.,v entity frameworku jsem samozřejmě nastavil

SetDatabaseInitializer<TMT>(null);

Využívám i precompiled "views ":https://www.nuget.org/…activeViews/ ,ale ať dělám co dělám nedostanu ten čas na starých strojích dolů...
Mojí otázkou je, co teď? Jaké jsou mé možnosti?
Logická struktura mojí aplikace je pomocí repositoru oddělená od té datové, takže bych teoreticky mohl změnit ORM nebo využívát SQL...jenže nevím, kterou cestou se vydat....už tak sem na entity frameworku utopil dost času a nechci znovu "zkoušet" řešení, které nemusí fungovat. První načtení je pro mě totiž velmi kritické.

Odpovědět 17. července 8:07
Všechno jde automatizovat.
Avatar
Marian Benčat
Redaktor
Avatar
Odpovídá na Luboš Štěpnička
Marian Benčat:17. července 10:45

Asi to úplně nechápu.. Pokud ti vadí první call 3sec, proč si sahal po ORM? Jinak.. Co ti brání si to volání čas od času strojově zavolat...? MŮŽE TO brzdit cokoliv, jitting, první navázání spojeni, vytvoření modelu, kompilace query.. Vše má řešení.. Na jit se dá sehnat precompiled binarka, na model se to dá precachovat, linq se dá predbuildit.. Ta snaha je ale zbytečná, když je mnohem jednodušší si ten dotaz třeba zavolat pri každém spuštění (po každé recyklaci)

Nahoru Odpovědět 17. července 10:45
"C# 3.0 (2007) volal Java 8 (2014), že chce svoje featury zpět"
Avatar
zelvicek
Člen
Avatar
zelvicek:17. července 13:01

Napadají mě dva postupy:

  1. zkusit ten první call udělat bez EF, tedy SqlConnection+SqlCom­mand+IDataRea­der. Pokud to taky bude trvat dlouho, není problém v EF.
  2. první/inicializační dotaz na data udělat ve vlákně (skrytě) a výsledek zahodit. Ostatní/ostrá volání už budou rychlá.
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 17. července 13:01
Avatar
Luboš Štěpnička:18. července 10:08

Celý projekt sem předělal abych používal SqlConnection, jede to bezproblémově. Jen sem musel vyřešit mapování do svých tříd po svém.

Nahoru Odpovědět 18. července 10:08
Všechno jde automatizovat.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.