Wenns schneller gehen muss: Precompiled Linq Queries

Performance, Performance, Performance! Wenn es auch bei euch darum geht die Geschwindigkeit einer Code-Pasage zu verbessern und ihr der Meinung seit, dass es eigentlich nicht mehr schneller geht, solltet ihr nicht vergessen eure Linq-Queries vorzukompilieren. Die Klasse CompiledQuery aus dem Namespace System.Data.Objects ist hierzu das nötige Helferlein.

 

Die generische Methode Compile der Klasse kann dazu verwendet werden um ein einfaches Linq-Query vorzukompilieren damit es zur Laufzeit performanter ausgeführt werden kann. Die Methode stellt genügend Überladungen bereit um die meisten Bedürfnisse abzudecken.

Eine Übersicht aller Überladungen der Methode findet Ihr hier.

Die Verwendung der Methode ist denkbar einfach, wie das nachfolgende Beispiel zeigt

 

   1:  // Ausgangscode
   2:  var products = from p in myContext.Products 
   3:                           where p.CategoryId = '1'
   4:                           select p

 

Zunächst definiert man eine Variable die das vorkompilierte Query speichern soll

   1:  Func<MyObjectContext, String, IQueryable<Product>> getProductsById;

 

Nun kommt die Zuweisung und die eigentliche Vorkompilierungsanweisung

   1:  getProductsById = 
   2:   CompiledQuery.Compile<MyObjectContext, String, IQueryable<Products>>
   3:   ((MyObjectContext context, String filterCondition) 
   4:     => from p in context.Products
   5:        where p.CategoryId = filterCondition
   6:        select p);

 

Zum Schluss noch ein Beispiel für die spätere Verwendung des vorkompilierten Queries

   1:  // alle Produkte der Kategorie 4 abrufen
   2:  var products = 
   3:      getProductsById.Invoke(MyRepository.Context, "4");

 

Mit diesen einfachen Schritten kann man die Ausführung von Linq Queries beschleunigen und somit nochmals an der Code-Performance bzw. Anwendungsperformance schrauben.

 

DotNetKicks-DE Image
Published Dienstag, 3. November 2009 08:01 von ThorstenHans
Abgelegt unter: , ,

Kommentare

# Wenns schneller gehen muss: Precompiled Linq Queries

Dienstag, 3. November 2009 08:56 von dotnet-kicks.de

Sie wurden gekickt (eine gute Sache) - Trackback von dotnet-kicks.de

# re: Wenns schneller gehen muss: Precompiled Linq Queries

Dienstag, 3. November 2009 08:58 von Daniel Lindemann

Hi,

hast du auch gemessen um wie viel % sich die Geschwindigkeit verbessert? Wäre interessant zu sehen.

Gruß

Daniel

# re: Wenns schneller gehen muss: Precompiled Linq Queries

Dienstag, 3. November 2009 13:50 von thomas.darimont

Hallo,

schönes Beispiel :)

Wäre cool, wenn es einen generischen Mechanismus gäbe mit dem solche Linq Expressions schon automatisch kompiliert werden könnten ohne diesen Code-Wust hinschreiben zu müssen.

Eine Möglichkeit wäre beispielsweise einen PostCompiler wie Postsharp (http://www.postsharp.org/) zu bemühen, der dann den Linq Ausdruck wrapped, on the fly compiliert und anschließend die schon kompilierte Linq-Expression zurück gibt.

Gruß Tom

# links for 2009-11-03 | Xelluloid

Mittwoch, 4. November 2009 02:09 von links for 2009-11-03 | Xelluloid

Ping Antwort von  links for 2009-11-03 | Xelluloid

# links for 2009-11-03 | Xelluloid

Mittwoch, 4. November 2009 02:09 von links for 2009-11-03 | Xelluloid

Ping Antwort von  links for 2009-11-03 | Xelluloid

# Twitter Trackbacks for Wenns schneller gehen muss: Precompiled Linq Queries - .Net rocks [dotnet-forum.de] on Topsy.com

Ping Antwort von  Twitter Trackbacks for                 Wenns schneller gehen muss: Precompiled Linq Queries - .Net rocks         [dotnet-forum.de]        on Topsy.com

Kommentar abgeben

(verpflichtend) 
(verpflichtend) 
(optional)
(verpflichtend)