Pomalý EF i při jednoduchém dotazu   otázka

SQL, Entity Framework

Zdravím,

mám ASP.NET Web API 2 projekt, který používá EF 6.0.2 a při obyčejném dotazu do tabulky, která má jeden řádek, mi dotaz vrací výsledek přibližně 2 sec. na lokále a cca. 10 - 15 sec. na webhostingu.

A to je hrozně moc, zvlášť, když tam nejsou žádná data, ale jeden záznam.

Mám podezření, že se na hostingu pokouší provádět nějaký recreate databáze, nebo migraci či něco podobného. Co všechno musím udělat, abych je vypnul?

Zatím mám nastaveno na contextu

this.Configuration.UseDatabaseNullSemantics = true;
Database.SetInitializer<DbContext>(null);

Děkuji

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Spíš sem hoď kus toho kódu, kterým taháš data vč. toho dotazu... Takhle ti asi nikdo nepomůže.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

V databázi mám pouze jediný řádek. Volám to takto:

IEnumerable<Item> items = context.Items.Where(s => s.UserId == userId);

Vygeneruje to toto sql:

SELECT 
[Extent1].[Id] AS [Id], 
[Extent1].[Name] AS [Name], 
[Extent1].[Practised] AS [Practised], 
[Extent1].[SourceLangId] AS [SourceLangId], 
[Extent1].[TargetLangId] AS [TargetLangId], 
[Extent1].[UserId] AS [UserId]
FROM [dbo].[Dictionary] AS [Extent1]
WHERE ([Extent1].[UserId] = @p__linq__0) AND (@p__linq__0 IS NOT NULL)

Když toto sql zavolám přímo z ado.net, tak query trvá mžiknutí oka.

Pravděpodobně je to způsobeno někde po cestě mezi sql a přesunet dat do entit, nebo se možná pokouší databázi vytvořit na začátku znova.

Na lokále to podle profileru volá opravdu pouze toto sql, na hostingu bohužel profiler nemám.

I tak to ale na lokále trvá skoro 2 sec, což je moc. Na hostingu pak 10-15sec.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Co máte za verzi .NETu a Entity Frameworku?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jo, ještě mě napadá - nedělá to náhodou jen při prvním dotazu? Tam to může být pomalejší, protože se načítají některé knihovny, případně pokud se jedná o ASP.NET, tak po každé změně např. web.configu, aspx nebo knihoven v adresáři bin se aplikace restartuje, a pak první požadavek trvá klidně i 10 sekund, záleží na rychlosti serveru.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

.NET mám 4.5 a EF 6.0.2

Při prvním dotazu to samozřejmě trvá, zajímavé právě je, že pokud refreshuju stránku velmi rychle za sebou, tak se interval zkrátí na rozumnou míru. Ale stačí počkat třeba 10 sec. pak dát refresh a interval je opět nesmyslně na 15 sekundách.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zkuste přes System.Diagnostics.Stopwatch zjistit, jak dlouho přesně trvá samotný dotaz - jestli v té webové aplikaci není něco jiného, co to brzdí.

Případně se zkuste podívat profilerem, jestli tam není nějaký jiný kód, který to ovlivňuje.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback