Czytałem ten post tutaj na micro ORM używane na SO.Co oznacza wypiekanie metody?
Autor pokazał to Stack Trace:
System.Reflection.Emit.DynamicMethod.CreateDelegate
System.Data.Linq.SqlClient.ObjectReaderCompiler.Compile
System.Data.Linq.SqlClient.SqlProvider.GetReaderFactory
System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Compile
System.Data.Linq.CommonDataServices+DeferredSourceFactory`1.ExecuteKeyQuery
System.Data.Linq.CommonDataServices+DeferredSourceFactory`1.Execute
System.Linq.Enumerable.SingleOrDefault
System.Data.Linq.EntityRef`1.get_Entity
Następnie powiedział:
W ślad powyżej widać, że 'EntityRef' piecze metodę, która nie jest problemem, chyba że dzieje się to 100 razy na sekundę.
Czy ktoś mógłby wytłumaczyć ślad stosu w odniesieniu do tego, co miał na myśli przez "pieczenie metody" i dlaczego byłby to problem z wydajnością?
Dzięki, czy możesz podać przykład lub wyjaśnić okoliczności, dlaczego drzewo wyrażeń musiałoby rekompilować w czasie wykonywania? Na przykład, w twoim przykładzie, czy jest jakaś część tego, która mogłaby być rekompilowana w środowisku wykonawczym? –
@Lolcoder: Załóżmy, że uzyskałeś od użytkownika dane szczegółowe zapytania, ponieważ, powiedzmy, wpisały słowo kluczowe, które chcieli wyszukać, czy chcieli wykonać filtr, zamówienie lub cokolwiek innego.Możesz wtedy zbudować predykat dynamicznie, zamiast kompilatora, który go zbuduje. Innym typowym przypadkiem użycia jest sytuacja, w której drzewo wyrażenia zmienia się w nie jako delegat, ale w dobrej wierze instrukcje SQL, które następnie są przesyłane do bazy danych zaplecza. –