1
我們的一個開發者的把這個在Global.asax代碼,Application_Start
方法:LINQ查詢應放慢全球ASAX
IEnumerable<object> result = from t in AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => x.GetTypes())
where t.GetInterfaces().Contains(typeof(IClassId)) &&
t.GetConstructor(Type.EmptyTypes) != null
select Activator.CreateInstance(t) as IClassId;
List<IGrouping<Guid, object>> lst = result.GroupBy(x => ((IClassId)x).ClassId)
.Where(y => y.Count() > 1)
.ToList();
當我跑在Visual Studio中的性能分析器,它被認定爲「熱路徑」。
我對此很新,想知道爲什麼會導致經濟放緩。
但是,您沒有給出足夠的信息來有效地回答這個問題,只是因爲某些事物被認定爲「熱門路徑」並不意味着它是。這通常是相對於其他方法或擴展。增加測試用例覆蓋率並評估結果。也就是說,LINQ通常不是最快的,因爲它在處理各種結果的方法中工作。你想找什麼?你可能會專門爲此編寫代碼,並避免LINQ。 –
這段代碼將遍歷整個程序集,它們被應用程序使用並在那裏搜索包含對象的IClassId接口,並查看它是否具有默認構造函數並創建它的實例。如果你有很多組件,這將需要一段時間。 –