compiled queries : linq-abfragen mit pegasus-stiefeln

13
Compiled Queries: LINQ-Abfragen mit Pegasus- Stiefeln © msg systems ag, August 2012 1 Gordon Breuer IT Consultant & Software Engineer Travel & Logistics

Upload: rod

Post on 07-Feb-2016

34 views

Category:

Documents


0 download

DESCRIPTION

Compiled Queries : LINQ-Abfragen mit Pegasus-Stiefeln. Gordon Breuer IT Consultant & Software Engineer Travel & Logistics. Die Inhalte. Wo / Wie entsteht das Problem. Wo und wie entsteht der Performance-Engpass?. IEnumerable < Customer >  linq  =  from customer in db. Customer - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Compiled Queries : LINQ-Abfragen mit Pegasus-Stiefeln

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

2 © msg systems ag, August 2012

Compiled Queries

Das Problem

Die TheorieDemo!

Die Inhalte

Page 3: Compiled Queries : LINQ-Abfragen mit Pegasus-Stiefeln

3 © msg systems ag, August 2012

Wo / Wie entsteht das Problem

Page 4: Compiled Queries : LINQ-Abfragen mit Pegasus-Stiefeln

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

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

6 © msg systems ag, August 2012

Compiled Queries als Lösung

Page 7: Compiled Queries : LINQ-Abfragen mit Pegasus-Stiefeln

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

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

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

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

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

12 © msg systems ag, August 2012

Demos in Visual Studio

Page 13: Compiled Queries : LINQ-Abfragen mit Pegasus-Stiefeln

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