2016-04-25 6 views
2

Ich versuche, eine ziemlich große Codebasis nach Methoden zu suchen, in denen große Objekte in einer der Methoden System.Web.Caching.Cache verwendet werden. Diese Typen können manchmal so groß sein, dass sie auf dem Large Object Heap enden, was wiederum eine schlechte Sache ist.Verwenden von NDepend, um herauszufinden, wo bestimmte Objekttypen in System.Web.Caching.Cache platziert werden

Grundsätzlich haben wir die Klasse ExternalProject.ReallyBigType, die in verschiedene Klassen vererbt wird. Und wir haben einige verschiedene Methoden, rufen Sie diese CacheUsingMethods, die Methoden in System.Web.Caching.Cache (über andere Implementierungen und so weiter). Ich möchte die CacheUsingMethods finden, die Objekte des Typs ExternalProject.ReallyBigType (oder Objekte, die von ExternalProject.ReallyBigType herrühren) verwenden und sie in einer der Methoden in System.Web.Caching.Cache enden lassen.

Gibt es eine Möglichkeit, dies mit NDepend zu erreichen?

Antwort

2

Was:

let bigTypes = Application.Types.Where(t => t.DeriveFrom("ExternalProject.ReallyBigType")) 
let cacheUsingMethods = Application.Methods.WithNameLike("RegeExToMatchThoseMethods") 
from m in cacheUsingMethods.UsingAny(bigTypes) 
let bigTypesUsed = bigTypes.UsedBy(m) 
select new { m, bigTypesUsed } 
+0

Vielen Dank für Ihre Antwort Patrick, es scheint jedoch, dass Dependency Injection meine Strömung bricht hier - i e die Cache-Teile in Klassen eingespritzt werden, die sie benötigen. Als Bonus wird der eigentliche 'ExternalProject.ReallyBigType' über einen Callback-Delegaten (' Func ') in die Cache-Methode übertragen. – orelob