Tag: optimization

具体来说,编译器如何积极优化生成的字节码?

我一直在阅读各种编译器的function,并且我遇到了许多编译器报告执行的“积极优化”一词。 例如,LLVM引用了以下编译时优化function: 内存/指针特定 循环变换 数据流 算术 死代码消除 内联 具体是什么意思? 假设您有以下代码片段,如何优化生成的字节代码以比编译器生成的更快地运行? 我特别感兴趣的是优化JIT驱动的运行时的字节码,例如C#,Java和Flash。 这很棘手,因为JIT只支持处理器通常执行的操作码的子集,这限制了您可以执行的优化量。 尽管如此,我仍然有兴趣看到什么是可能的,究竟是什么转换可以推动VM的极限。 虚构的代码块: for (i = 0; i > 16) – 10; }else{ out = ((in << 5) / 2) * 50 + 10; } dataOut[i] = out; } 编译器为基于堆栈的JIT VM(如Flash Player)生成的近似伪代码:(原谅我任何错误,这完全是手写的!) // i = 0 label: “forInit” push 0 writeTo “i” // while […]

如何在c#中打印文本框的行号

这将是一个很长的post。 如果有任何关于我遵循的程序,我想提出建议。 我想要最好的方法在richtextbox中的每个CRLF终止行旁边打印行号。 我正在使用C#和.NET。 我尝试过使用ListView,但是当行数增加时效率很低。 我已经成功地在自定义控件中使用Graphics来打印行号,到目前为止我对性能感到满意。 但随着行数增加到50K到100K,滚动受到严重影响。 我已经覆盖了WndProc方法并处理所有消息,仅在需要时调用行号打印。 (重写OnContentsResized和OnVScroll会对打印方法进行冗余调用)。 现在行号打印很好,当行数小到高达10K(我很好,因为它很少需要编辑10000行的文件)但我想删除限制。 几点观察 richtexbox中显示的行数是常量+ -1。 因此,性能差异应归因于大文本,而不是因为我使用的是图形绘画。 与小文件相比,大文本的绘制行号较慢 现在的伪代码 FIRST_LINE_NUMBER = _textBox.GetFirstVisibleLineNumber(); LAST_LINE_NUMBER = _textBox.GetLastVisibleLineNUmber(); for(loop_from_first_to_last_line_number) { Y = _textBox.GetYPositionOfLineNumber(current_line_number); graphics_paint_line_number(current_line_number, Y); } 我正在使用GetCharIndexFromPosition并遍历RichTextBox.Lines以查找获取行号的两个函数中的行号。 要获得Y位置,我使用GetPositionFromCharIndex来获取Point结构。 所有上述RichTextBox方法似乎都是O(n),这会降低性能。 (如果我错了,请纠正我。) 我决定使用二叉树来存储行号,以便在通过char索引搜索行号时提高搜索性能。 我想到了一个数据结构,它需要O(n)构造时间,O(nlgn)最坏情况更新和O(lgn)搜索。 这种方法值得付出努力吗? 有没有其他方法可以解决这个问题? 如果需要,我准备从头开始编写控件,我只是希望它重量轻,速度快。

在引用父对象字段,属性或方法时,’base’和’this’之间有什么区别吗?

请考虑以下代码: public class Vehicle { public void StartEngine() { // Code here. } } public class CityBus : Vehicle { public void MoveToLocation(Location location) { ////base.StartEngine(); this.StartEngine(); // Do other stuff to drive the bus to the new location. } } 这个this.StartEngine(); 和base.StartEngine(); ,除了在第二种情况下, StartEngine方法无法在CityBus类中移动或覆盖? 是否会对性能产生影响?

C#编译器或JIT可以优化lambda表达式中的方法调用吗?

我在另一个StackOverflow问题开始( 在评论中 )的讨论后开始这个问题,我很想知道答案。 考虑以下表达式: var objects = RequestObjects.Where(r => r.RequestDate > ListOfDates.Max()); 在这种情况下,将ListOfDates.Max()的评估移出Where子句会有任何(性能)​​优势,还是1.编译器或2. JIT优化它? 我相信C#只会在编译时进行常量折叠,并且可以认为ListOfDates.Max()在编译时是不可知的,除非ListOfDates本身在某种程度上是常量。 也许还有另一个编译器(或JIT)优化,确保只评估一次?

快速count()两个字符串数组的交集

我需要计算对应于两个大字符串数组的交集的元素数量,并且非常快。 我使用以下代码: arr1[i].Intersect(arr2[j]).Count() 对于CPU时间,VS Profiler指示 System.Linq.Enumerable.Count() 85.1% System.Linq.Enumerable.Intersect() 0.3% 不幸的是,完成所有工作可能需要数小时。 怎么做得更快?

在C#中应用DeMorgan定理来手动优化条件语句中的布尔表达式(例如条件)是否有用

回到我在C和C ++中完成大部分工作的那一天,当然,我会手动应用deMorgan定理来优化任何非平凡的布尔表达式。 在C#中执行此操作是否有用,或者优化程序是否使这不必要?

ResolveBundleUrl无法解析所有文件?

我是MVC的新手,所以我想开始一个新项目并尝试MVC4中的一些新function。 我的Content目录中有两个css文件, normalise_mini和site.css 。 当我使用以下代码时: 它只需要我的site.css文件而不是我的规范化文件。 我的应用开始时有以下内容: protected void Application_Start() { // Remove all other view engines except razor: ViewEngines.Engines.Clear(); ViewEngines.Engines.Add(new RazorViewEngine()); AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes); BundleTable.Bundles.RegisterTemplateBundles(); BundleTable.Bundles.EnableDefaultBundles(); } 我是否需要为每个css文件创建一个包(就像这个人一样)? 或者它应该只是自动找到所有的css文件(我希望这是默认行为)。 值得注意的是,我开始将这个项目作为基于Razor视图引擎的空网站(实际上根本不是空的:/) 提前致谢 更新 根据发布的链接,我需要注释掉注册模板包的行。 例如: protected void Application_Start() { // Remove all other view engines except razor: ViewEngines.Engines.Clear(); ViewEngines.Engines.Add(new RazorViewEngine()); AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes); //BundleTable.Bundles.RegisterTemplateBundles(); // […]

你会在哪里使用C#运行时编译?

我最近在另一个关于C#运行时编译的网站上进行了简短的讨论,同时搜索其他内容并认为这个想法很有趣。 你有没有用过这个? 我试图确定如何/何时可以使用它以及它解决了什么问题。 我会非常有兴趣听听你是如何使用它的,或者是在有意义的环境中。 非常感谢。

如何在安装结束时运行nGen(MSI)?

我想在安装结束时执行nGen只是为了提高应用程序首次启动的感知性能。 我怎么能这样做? 有一些最佳做法吗? 我可以确定nGen始终与.NET Framework一起安装吗? 谢谢!

是否可以在C#中使用分支预测提示?

例如,我知道它是为gcc定义的,并在Linux内核中用作: #define likely(x) __builtin_expect((x),1) #define unlikely(x) __builtin_expect((x),0) 如果在C#中没有这样的东西是可能的,那么手动重新排序if语句的最佳选择是什么,最可能的情况是第一个? 有没有其他方法可以根据这种类型的外部知识进行优化? 在相关的说明中,CLR知道如何识别保护条款并假设将采用备用分支,使得这种优化不适合用于保护条款,是否正确? (请注意,我意识到这可能是微观优化;我只对学术目的感兴趣。)