PowerPoint-Präsentation

Werbung
Compiled Queries: LINQ-Abfragen mit Pegasus-Stiefeln
Gordon Breuer
IT Consultant & Software Engineer
Travel & Logistics
1
© msg systems ag, August 2012
Die Inhalte
Das
Problem
Compiled
Queries
Demo!
2
Die
Theorie
© msg systems ag, August 2012
Wo / Wie entsteht das Problem
3
© msg systems ag, August 2012
Wo und wie entsteht der Performance-Engpass?
LINQ
λ
(Lambda)
ExpressionTree
SQL
4
IEnumerable<Customer> linq = from customer in db.Customer
where customer.LastName.StartsWith("B")
select customer;
IQueryable<Customer> lambda =
db.Customer.Where(customer => customer.LastName.StartsWith("B"));
Expression<Func<Customer, bool>> bedingung =
s => s.LastName.StartsWith("B");
IQueryable<Customer> lambda = db.Customer.Where(bedingung);
SELECT * FROM Customer WHERE LastName = 'B%'
© msg systems ag, August 2012
Wo und wie entsteht der Performance-Engpass?
LINQ
λ
(Lambda)
ExpressionTree
SQL
5
IEnumerable<Customer> linq = from customer in db.Customer
where customer.LastName.StartsWith("B")
select customer;
IQueryable<Customer> lambda =
db.Customer.Where(customer => customer.LastName.StartsWith("B"));
Expression<Func<Customer, bool>> bedingung =
s => s.LastName.StartsWith("B");
IQueryable<Customer> lambda = db.Customer.Where(bedingung);
SELECT * FROM Customer WHERE LastName = 'B%'
© msg systems ag, August 2012
Compiled Queries als Lösung
6
© msg systems ag, August 2012
Compiled Queries
• Verfügbar seit .NET 3.5
• Namensraum System.Data.Linq
• Statische Klasse CompiledQuery
• Compile<TArg0, …, TResult>(
Expression<Func<TArg0, …,
TResult>>)
7
© msg systems ag, August 2012
Compiled Queries
• 1. Parameter = Objekt-Kontext für den Datenzugriff
• Letzter Parameter (n) = Rückgabewert
• 2. - (n-1). Parameter = Optionale Übergabeparameter
• In .NET 3.5 und Silverlight: Überladungen für bis zu drei
Übergabeparameter
• In .NET 4.0+: Überladungen für bis zu 15
Übergabeparameter
• Sollten mehr gebraucht werden: Helferklasse
8
© msg systems ag, August 2012
Instanzen vs. Statische Klassen
• Aufruf in instanziierten Klassen?
• Statischer Kontext!
9
© msg systems ag, August 2012
Die Vorteile
Die Vor- und Nachteile im Überblick
Anfänglicher Overhead
wirkt sich bei wenigen
Aufrufen negativ auf die
Performance aus.
Höherer
Speicherverbrauch durch
Zwischenspeichern der
Funktionen.
Schlechtere Lesbarkeit
des Quellcodes.
Die Nachteile
10
Deutlicher
Geschwindigkeitszuwachs
bei oft aufgerufenen
Abfragen
© msg systems ag, August 2012
Tipps zur Verwendung
• Alle Compiled Queries in einer
eigenen statischen Klasse
sammeln
• Es muss immer der gleiche DataKontext verwendet werden
• Das zurückgegebene one-time
Enumerable in eine Liste
umwandeln
11
© msg systems ag, August 2012
Demos in Visual Studio
12
© msg systems ag, August 2012
Vielen Dank für Ihre Aufmerksamkeit
Gordon Breuer
IT Consultant // Software Engineer
msg systems ag
Robert-Bürkle-Straße 1
85737 Ismaning/München
Telefon:
E-Mail:
+49 160 9091 5143
[email protected]
Twitter:
Facebook:
Blog:
@anheledir
http://facebook.com/gordon.breuer
http://gordon-breuer.de
Telefon: +49 89 96101-0
Fax: +49 89 96101-1113
[email protected]
www.msg-systems.com
www.msg-systems.com
13
© msg systems ag, Mai 2012
Herunterladen