compiled queries: linq-abfragen mit pegasus-stiefeln © msg systems ag, august 20121 gordon breuer...
TRANSCRIPT
![Page 1: Compiled Queries: LINQ-Abfragen mit Pegasus-Stiefeln © msg systems ag, August 20121 Gordon Breuer IT Consultant & Software Engineer Travel & Logistics](https://reader034.vdocument.in/reader034/viewer/2022051819/55204d7e49795902118cee34/html5/thumbnails/1.jpg)
1
Compiled Queries: LINQ-Abfragen mit Pegasus-Stiefeln
© msg systems ag, August 2012
Gordon Breuer
IT Consultant & Software Engineer
Travel & Logistics
![Page 2: Compiled Queries: LINQ-Abfragen mit Pegasus-Stiefeln © msg systems ag, August 20121 Gordon Breuer IT Consultant & Software Engineer Travel & Logistics](https://reader034.vdocument.in/reader034/viewer/2022051819/55204d7e49795902118cee34/html5/thumbnails/2.jpg)
2 © msg systems ag, August 2012
Compiled Queries
Das Problem
Die TheorieDemo!
Die Inhalte
![Page 3: Compiled Queries: LINQ-Abfragen mit Pegasus-Stiefeln © msg systems ag, August 20121 Gordon Breuer IT Consultant & Software Engineer Travel & Logistics](https://reader034.vdocument.in/reader034/viewer/2022051819/55204d7e49795902118cee34/html5/thumbnails/3.jpg)
3 © msg systems ag, August 2012
Wo / Wie entsteht das Problem
![Page 4: Compiled Queries: LINQ-Abfragen mit Pegasus-Stiefeln © msg systems ag, August 20121 Gordon Breuer IT Consultant & Software Engineer Travel & Logistics](https://reader034.vdocument.in/reader034/viewer/2022051819/55204d7e49795902118cee34/html5/thumbnails/4.jpg)
4 © msg systems ag, August 2012
LINQ
λ(Lambda)
Expression-Tree
SQL
Wo und wie entsteht der Performance-Engpass?
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%'
Magic
![Page 5: Compiled Queries: LINQ-Abfragen mit Pegasus-Stiefeln © msg systems ag, August 20121 Gordon Breuer IT Consultant & Software Engineer Travel & Logistics](https://reader034.vdocument.in/reader034/viewer/2022051819/55204d7e49795902118cee34/html5/thumbnails/5.jpg)
5 © msg systems ag, August 2012
LINQ
λ(Lambda)
Expression-Tree
SQL
Wo und wie entsteht der Performance-Engpass?
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%'
![Page 6: Compiled Queries: LINQ-Abfragen mit Pegasus-Stiefeln © msg systems ag, August 20121 Gordon Breuer IT Consultant & Software Engineer Travel & Logistics](https://reader034.vdocument.in/reader034/viewer/2022051819/55204d7e49795902118cee34/html5/thumbnails/6.jpg)
6 © msg systems ag, August 2012
Compiled Queries als Lösung
![Page 7: Compiled Queries: LINQ-Abfragen mit Pegasus-Stiefeln © msg systems ag, August 20121 Gordon Breuer IT Consultant & Software Engineer Travel & Logistics](https://reader034.vdocument.in/reader034/viewer/2022051819/55204d7e49795902118cee34/html5/thumbnails/7.jpg)
7 © msg systems ag, August 2012
• Verfügbar seit .NET 3.5
• Namensraum System.Data.Linq
• Statische Klasse CompiledQuery• Compile<TArg0, …, TResult>(Expression<Func<TArg0, …, TResult>>)
Compiled Queries
![Page 8: Compiled Queries: LINQ-Abfragen mit Pegasus-Stiefeln © msg systems ag, August 20121 Gordon Breuer IT Consultant & Software Engineer Travel & Logistics](https://reader034.vdocument.in/reader034/viewer/2022051819/55204d7e49795902118cee34/html5/thumbnails/8.jpg)
8 © msg systems ag, August 2012
• 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
Compiled Queries
![Page 9: Compiled Queries: LINQ-Abfragen mit Pegasus-Stiefeln © msg systems ag, August 20121 Gordon Breuer IT Consultant & Software Engineer Travel & Logistics](https://reader034.vdocument.in/reader034/viewer/2022051819/55204d7e49795902118cee34/html5/thumbnails/9.jpg)
9 © msg systems ag, August 2012
• Aufruf in instanziierten Klassen?
• Statischer Kontext!
Instanzen vs. Statische Klassen
![Page 10: Compiled Queries: LINQ-Abfragen mit Pegasus-Stiefeln © msg systems ag, August 20121 Gordon Breuer IT Consultant & Software Engineer Travel & Logistics](https://reader034.vdocument.in/reader034/viewer/2022051819/55204d7e49795902118cee34/html5/thumbnails/10.jpg)
10 © msg systems ag, August 2012
Deutlicher Geschwindigkeitszuwachs bei oft aufgerufenen Abfragen
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 Vorteil
e
Die Nacht
eile
Die Vor- und Nachteile im Überblick
![Page 11: Compiled Queries: LINQ-Abfragen mit Pegasus-Stiefeln © msg systems ag, August 20121 Gordon Breuer IT Consultant & Software Engineer Travel & Logistics](https://reader034.vdocument.in/reader034/viewer/2022051819/55204d7e49795902118cee34/html5/thumbnails/11.jpg)
11 © msg systems ag, August 2012
• Alle Compiled Queries in einer eigenen statischen Klasse sammeln
• Es muss immer der gleiche Data-Kontext verwendet werden
• Das zurückgegebene one-time Enumerable in eine Liste umwandeln
Tipps zur Verwendung
![Page 12: Compiled Queries: LINQ-Abfragen mit Pegasus-Stiefeln © msg systems ag, August 20121 Gordon Breuer IT Consultant & Software Engineer Travel & Logistics](https://reader034.vdocument.in/reader034/viewer/2022051819/55204d7e49795902118cee34/html5/thumbnails/12.jpg)
12 © msg systems ag, August 2012
Demos in Visual Studio
![Page 13: Compiled Queries: LINQ-Abfragen mit Pegasus-Stiefeln © msg systems ag, August 20121 Gordon Breuer IT Consultant & Software Engineer Travel & Logistics](https://reader034.vdocument.in/reader034/viewer/2022051819/55204d7e49795902118cee34/html5/thumbnails/13.jpg)
13
www.msg-systems.com
Vielen Dank für Ihre Aufmerksamkeit
© msg systems ag, Mai 2012
Gordon BreuerIT Consultant // Software Engineer
Telefon: +49 160 9091 5143E-Mail: [email protected]
Twitter: @anheledirFacebook: http://facebook.com/gordon.breuerBlog: http://gordon-breuer.de
msg systems ag
Robert-Bürkle-Straße 185737 Ismaning/München
Telefon: +49 89 96101-0Fax: +49 89 [email protected]
www.msg-systems.com
eure