1
我在我目前一流的設計使用一些功能,如C#COMDelegate :: DelegateConstruct優化
ICollection<ICache> caches = new HashSet<ICache>();
ICollection<T> Matches<T>(string dependentVariableName)
{
return caches
.Where(x => x.GetVariableName() == dependentVariableName)
.Where(x => typeof(T).IsAssignableFrom(x.GetType()))
.Select(x => (T) x)
.ToList();
}
。它們從體系結構的角度出色地工作 - 我可以在其中隨意添加各種相關類型的對象(在本例中爲ICaches),並將它們作爲具體類型的集合來檢索。
一個問題是,這裏的框架是一個科學軟件包,這些功能位於非常熱門的代碼路徑上,在幾分鐘內被調用數千次。其結果是:像上面
和功能是COMDelegate :: DelegateConstruct的主要消費者。
正如您從樣本%的相對分佈中可以看到的那樣,這不是一個交易斷路器,但它可以減少一點開銷!
在此先感謝。
所以#2我可以馬上改變(謝謝)。 R/E#1,我知道這個LINQ表達式與DelegateConstruct調用有關,因爲性能報告中的「此函數被調用......」功能(更不用說這一行被標記爲「熱代碼路徑」)。 我正在閱讀:http://msmvps.com/blogs/jon_skeet/archive/2011/08/23/optimization-and-generics-part-2-lambda-expressions-and-reference-types.aspx和想知道我的問題是否與在Lambda表達式中使用泛型參數有關?我會認爲IsAssignableFrom會被緩存? – D3C34C34D
另外,如果你想拉代碼,它在這裏的github上: https://github.com/JLospinoso/sie/blob/master/SienaDotNet/Modeling/Caches/Repository/CacheHashSet.cs – D3C34C34D