mfc*_*mfc 5 c# compiler-construction optimization
我需要优化广泛使用linq的大型应用程序.许多linq语句在linq扩展方法中创建匿名对象.一个例子 :-
// custom sort order
var sortedData = data.OrderBy(x => (new List<string>() {"Orange", "Apple", "Pear" }).IndexOf(x.Name));
foreach (var d in sortedData) {
....
Run Code Online (Sandbox Code Playgroud)
问题是每次迭代都会创建一个新的List.
是否有编译器标志我可以设置为让编译器进行一些静态分析并将循环不变代码提取到循环之外?
我认为很多人都被你的例子所困扰,而错过了你真正的问题。
不,Visual Studio 中没有内置的简单工具可以静态地执行此操作(无需运行程序)。如果您可以运行程序并执行有问题的代码,那么有两个工具可以帮助您(您确实有具有 100% 代码覆盖率的单元测试,不是吗;))。一种是Visual Studio 中内置的探查器,另一种是CLR 探查器。
我从未使用过 CLR 分析器,它可能只是 Visual Studio 中的旧版本。Visual Studio 探查器可以向您显示是否正在创建大量对象(示例中的列表),并查看在代码中的何处创建这些对象。它还可以向您显示哪些代码行执行时间最长,以便您知道在哪里集中精力来加速程序。
如果您在运行探查器时遇到特定问题,我建议您就该问题提出一个新问题,