【发布时间】:2017-05-22 18:28:00
【问题描述】:
我们的一位开发人员将其放入 Global.asax 代码中,Application_Start 方法:
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 接口,并查看它是否具有默认构造函数并创建它的实例。如果您有很多程序集,这将需要一段时间。
标签: c# asp.net performance linq