Das Modul, das ich entwickle, macht viele kleine Auswahl, Einfügungen und Updates. Änderungen, die durch Befehle im Namespace SubSonic.Query
(ActiveRecord is not my weapon of choice) vorgenommen werden, scheinen wesentlich schneller zu sein als Objekt-für-ID-Auswahlabfragen, die in LINQ
geschrieben wurden.SubSonic LINQ-Abfrage ist 3 mal langsamer als SubSonic.Query.Select
Es dauert 7.15s folgende LINQ
Abfrage 1000mal
long a = (
from u in UserCollection
where u.UserId == value
select u.UserId
).FirstOrDefault<long>();
Während nur 2.38s für die tausend Läufe von Select
Abfrage
long a = new SubSonic.Query.Select(provider, "UserId").From<User>()
.Where<User>(x => x.UserId == value).ExecuteScalar<long>();
ich eine Zeit unter der Haube zu schauen nahm auszuführen von LINQ in SubSonic. Der Profiler sagt, dass viel Prozessorzeit von DbQueryProvider.Execute
Anrufe in DbQueryProvider.GetExecutionPlan
Methode ausgegeben wird - 64%. 22% werden in System.Linq.Expressions.Complie
ausgegeben, wenn DbQueryProvider.Execute
nur 6% der Zeit verwendet.
Ich bin voll und ganz zufrieden damit, wie SubSonic LINQ-Abfragen analysiert und kompiliert werden. Allerdings wäre es toll, Compilation Anlage Abfragen für repeting SubSonic LINQ zu haben, wie System.Data.Linq.CompiledQuery
in Linq2Sql
.
Ist es wirklich ein Problem überhaupt? Es scheint nicht zu langsam für einen wirklichen Zweck. – ykatchou
Meinst du eine Web-Anwendung für einen echten Zweck? Das ist ein Problem für mich. Man stelle sich vor, wie lange es dauern würde, 400k Transaktionen kleiner wählt und Einsätze zu machen. Ich muss den Primärschlüssel auswählen, da SubSonic3 das Einfügen + Auswählen nicht zulässt. – Mike