Pytanie Wydajność Linq do Entities vs ESQL


Podczas korzystania z Entity Framework, czy ESQL działa lepiej niż Linq dla encji? 

Wolałbym używać Linq do Entities (głównie ze względu na silne sprawdzanie), ale niektórzy z moich innych członków zespołu cytują wydajność jako powód używania ESQL. Chciałbym uzyskać pełne wyobrażenie o pro / con's korzystania z obu metod.


18
2017-09-02 00:14


pochodzenie




Odpowiedzi:


Najbardziej oczywiste różnice to:

Linq to Entities to silnie napisany kod zawierający ładną składnię ze zrozumieniem zapytań. Fakt, że "od" przychodzi przed "wybierz" pozwala IntelliSense, aby ci pomóc.

Podmiot SQL używa tradycyjnych zapytań opartych na łańcuchach z bardziej znaną składnią SQL, w której instrukcja SELECT pojawia się przed FROM. Ponieważ eSQL jest oparty na łańcuchach, dynamiczne zapytania mogą być tworzone w tradycyjny sposób w czasie wykonywania za pomocą manipulacji łańcuchami.

Mniej oczywistą kluczową różnicą jest:

Linq to Entities umożliwia zmianę kształtu lub "projektu" wyników zapytania na dowolny wymagany kształt za pomocą składni "wybierz nową {...}". Anonimowe typy, nowe w C # 3.0, pozwoliły na to.

Projekcja nie jest możliwa przy użyciu Entity SQL, ponieważ zawsze powinieneś zwrócić ObjectQuery <T>. W niektórych scenariuszach możliwe jest użycie ObjectQuery <object>, ale musisz obejść fakt, że. Wybierz zawsze zwraca ObjectQuery <DbDataRecord>. Zobacz kod poniżej ...

ObjectQuery<DbDataRecord> query = DynamicQuery(context,
        "Products",
        "it.ProductName = 'Chai'",
        "it.ProductName, it.QuantityPerUnit");

public static ObjectQuery<DbDataRecord> DynamicQuery(MyContext context, string root, string selection, string projection)
{
    ObjectQuery<object> rootQuery = context.CreateQuery<object>(root);
    ObjectQuery<object> filteredQuery = rootQuery.Where(selection);
    ObjectQuery<DbDataRecord> result = filteredQuery.Select(projection);
    return result;
}

Są jeszcze inne subtelne różnice opisane przez jednego z członków zespołu w szczegółach tutaj i tutaj.


17
2017-12-10 15:41





ESQL może również generować niektóre szczególnie błędne sql. Musiałem śledzić problem z takim zapytaniem, które wykorzystywało odziedziczone klasy i odkryłem, że mój pidly-mały ESQL z 4 linii został przetłumaczony na 100000 znaków potwora SQL.

Czy to samo z Linq i skompilowanym kodem było znacznie bardziej zarządzalne, powiedzmy 20 linii SQL.

Poza tym, co inni wspomnieli, Linq jest silnie typem, chociaż bardzo irytuje do debugowania bez funkcji edycji i kontynuacji.

OGŁOSZENIE


3
2017-11-20 17:04





Entity-SQL (eSQL) pozwala na łatwiejsze wykonywanie zadań, takich jak zapytania dynamiczne, niż LINQ do jednostek. Jeśli jednak nie masz scenariusza wymagającego eSQL, byłbym niezdecydowany polegać na nim na LINQ, ponieważ będzie on trudniejszy do utrzymania (np. Nie będzie więcej sprawdzania kompilacji itd.).

Wierzę, że LINQ pozwala również na wstępne kompilowanie zapytań, co może zapewnić lepszą wydajność. Rico Mariani blogował o wydajności LINQ chwilę wstecz i omawia skompilowane zapytania.


2
2017-09-02 21:38





ładny wykres pokazujący porównanie wydajności tutaj:      Sprawdzono wydajność modułu Entity nie ma dużej różnicy między ESQL i Entities ale ogólnie różnice są znaczące w używaniu jednostek nad bezpośrednimi zapytaniami

Entity Framework używa dwóch warstw mapowania obiektów (w porównaniu do pojedynczej warstwy w LINQ do SQL), a dodatkowe mapowanie ma koszty wydajności. Przynajmniej w wersji EF 1 projektanci aplikacji powinni wybrać Entity Framework tylko wtedy, gdy możliwości modelowania i odwzorowania ORM mogą uzasadnić ten koszt.


2
2018-05-14 16:12





Im więcej kodu można pokryć, sprawdzając dla mnie czas kompilacji, jest coś, co spowodowałoby wyższą premię niż wydajność. Powiedziałem, że na tym etapie prawdopodobnie pochylę się do ESQL nie tylko ze względu na wydajność, ale również (obecnie) o wiele bardziej elastyczną w tym, co potrafi. Nie ma nic gorszego niż używanie stosu technologii, który nie ma funkcji, której naprawdę potrzebujesz.

Struktura encji nie obsługuje rzeczy takich jak właściwości niestandardowe, zapytania niestandardowe (gdy trzeba naprawdę dostroić wydajność) i nie działa tak samo, jak linq-sql (tj. Istnieją funkcje, które po prostu nie działają w jednostce struktura).

Moim osobistym wrażeniem Entity Framework jest to, że istnieje duży potencjał, ale prawdopodobnie jest trochę "sztywny" w jego implementacji do użycia w środowisku produkcyjnym w jego obecnym stanie.


1
2017-09-02 01:33





Dla bezpośrednich zapytań używam linq do encji, dla dynamicznych zapytań używam ESQL. Może odpowiedź nie jest albo / albo, ale i / i.


0
2018-05-28 18:20