考慮以下代碼:瞭解擴展的ElementAt(指數)
int size = 100 * 1000 * 1000;
var emu = Enumerable.Range(0, size);
var arr = Enumerable.Range(0, size).ToArray();
當我打電話emu.ElementAt(大小-10)和arr.ElementAt(大小-10)和測量時間的ARR更快(數組爲0.0002s,而IEnumerable爲0.59s)。
據我所知,進一步擴展方法ElementAt()具有簽名
public static TSource ElementAt<TSource>(this IEnumerable<TSource> source, int index)
並且由於「源」是一個IEnumerable的執行是相似的邏輯 - 反對我所看到的,其中陣列直接訪問。
可能有人請解釋這:)
你可以通過讓自定義集合類型實現IList來間接地選擇優化,但是明確地實現它和/或只將它公開爲'IEnumerable '。這並不理想,但基本上這些都是優化的'鉤子',如果你願意,你可以爲每個自定義擴展方法提供一個自定義的接口,允許類編寫器重寫擴展方法的行爲,儘管這可能會有點混亂,像'WidgetExtensions.ToggleWidget (這個Widget小部件)'和'WidgetExtensions.IToggleWidget '。 –
2010-07-05 17:12:39