草庐IT

OPTIMIZATION

全部标签

c# - IEnumerable<T>.Count 在哪些情况下进行了优化?

使用reflector我注意到System.Linq.Enumerable.Count方法中有一个条件可以针对IEnumerable的情况对其进行优化。passed实际上是一个ICollection.如果转换成功,Count方法不需要遍历每个元素,而是可以调用ICollection的Count方法。基于此,我开始认为IEnumerable可以像集合的只读View一样使用,而不会出现我最初基于IEnumerable的API预期的性能损失我感兴趣的是是否优化了CountIEnumerable时仍然成立是Select的结果关于ICollection的声明,但根据反射(reflect)的代码,

c# - 我需要更快的 .NET C# float 学运算(用于大数组的乘法和除法)

我需要最快的方法来乘除大数据数组。我读过这篇文章(由BenVoigt撰写here):.NETdoesn'tuseMMXorSSEorAVX,asofthecurrentversion(...)modernC++compilersnotonlyallowSIMDusage,butcanauto-vectorizeordinary-lookingcodeintoSIMDinstructions.我想我需要:SSE支持矢量运算(一次乘以4个float)多线程支持(不会以某种方式与C#线程冲突的解决方案/库)有没有我可以使用的库/dll?编辑:Octave的任何替代品?我只需要2个操作:除法、

c# - 为什么重用 DataContext 会对性能产生负面影响?

经过fairamountofresearch还有一些errors,我修改了我的代码,以便在每次查询数据库或插入数据时创建一个新的DataContext。并且频繁查询数据库-对于处理的25万笔交易中的每笔交易,在插入交易之前查询数据库以获得客户ID、部门ID和类别。所以现在我正在尝试优化代码,因为它每秒只处理大约15笔交易。我删除了一些无关的查询并添加了一些索引并将其提高到每秒30个。然后我想即使每个人都说DataContext是轻量级的,但每次事务创建一个新的4次还是要花一些钱,所以我尝试重用DataContext。令我惊讶的是,重用上下文会导致性能下降到每秒10个事务!为什么会这样?

c# - .NET CLR VM 中的逃逸分析

CLR编译器/JIT是否执行任何逃逸分析?例如,在Java中,一个循环变量一个在循环中分配但没有逃脱循环的对象似乎分配在堆栈上而不是堆上(参见EscapeanalysisinJava)。为了澄清,在下面的示例中,编译器是否会优化foo的堆分配,因为它永远不会逃脱循环。classFoo{intnumber;Foo(intnumber){this.number=number;}publicoverridestringToString(){returnnumber.ToString();}}for(inti=0;i 最佳答案 如果您指的是

c# - 代码契约(Contract)的好处

我为什么要使用像这样的代码契约Contract.Requires(x!=null,"x");而不是旧的if(x!=null){}elsethrow...除了简洁还有其他好处吗? 最佳答案 根据MSDN:Thebenefitsofcodecontractsincludethefollowing:Improvedtesting:Codecontractsprovidestaticcontractverification,runtimechecking,anddocumentationgeneration.Automatictesting

c# - C#中的图形布局优化

我有一个对象列表,我需要将其组织为美学图。我目前的方法涉及IronPython和遗传算法,但这需要很长时间。我一直在阅读Graphviz、QuickGraph和Graph#,但我不需要可视化部分-我已经有一个应用程序可以显示给定x/y坐标的节点。有人告诉我Sugiyama算法和基于力的算法系列都倾向于输出令人愉悦的图形,但我似乎无法找到一个.NET库来输出坐标而不是没有一些非常严格的源代码的图像黑客攻击。谁能推荐库、算法之类的? 最佳答案 有多种选择,各有利弊-您可能需要筛选this这是一个软件列表,或多或少可以满足您的需求。过去很

c# - C# 中的循环反转加速应用程序

我们正在使用EmguCV开发视频处理应用程序,最近不得不进行一些像素级操作。我最初编写的循环遍历图像中的所有像素,如下所示:for(intj=0;j执行循环的时间非常糟糕。然后我在EmguCV论坛上发帖,得到了这样切换循环的建议:for(intj=Img.Width;j-->0;){for(inti=Img.Height;i-->0;){//Pixeloperationcode}}我很惊讶地发现代码执行了一半的时间!我唯一能想到的是每次访问属性时在循环中进行的比较,它不再需要这样做。这是加速的原因吗?还是有别的东西?我很高兴看到这种改进。如果有人能澄清原因,我会很高兴。

c# - 如何从 C# 中的 "pure function"获得优化?

如果我有以下函数,它被认为是纯粹的,因为它没有副作用,并且在给定相同输入x的情况下总是会产生相同的结果。publicstaticintAddOne(intx){returnx+1;}据我了解,如果运行时了解功能纯度,它可以优化执行,这样就不必重新计算返回值。有没有办法在C#中实现这种运行时优化?我假设这种优化有一个名称。它叫什么?编辑:显然,我的示例函数不会从这种优化中获得太多好处。该示例是为了表达我心目中的纯度类型,而不是真实世界的示例。 最佳答案 正如其他人指出的那样,如果您想节省重新计算您已经计算过的结果的成本,那么您可以内存

c# - 在 C# 中确定未修剪的字符串是否为空的最有效方法是什么?

我有一个字符串,周围可能有空白字符,我想检查它是否本质上是空的。有很多方法可以做到这一点:1if(myString.Trim().Length==0)2if(myString.Trim()=="")3if(myString.Trim().Equals(""))4if(myString.Trim()==String.Empty)5if(myString.Trim().Equals(String.Empty))我知道这通常是一个明显的过早优化案例,但我很好奇并且有可能这样做足以对性能产生影响。那么,哪种方法最有效?有没有我没有想到的更好的方法?编辑:此问题的访问者注意事项:已经对这个问题进

c# - C# 编译器和 JIT 都做了哪些优化?

我将继续为我的编译器类开发C#编译器。目前,我几乎完成了教科书中有关编译器优化的章节。在大多数情况下,我的教科书在编写时并没有考虑到即时编译,我很好奇C#编译器执行的静态预jit优化与它在编写过程中执行的操作JIT流程?当我与人们谈论针对CLR进行编译时,我通常会听到诸如“大部分优化由JIT完成”之类的话。诸如循环展开、常量折叠/传播、指令交织之类的事情是由C#编译器在Jit前完成的还是由抖动处理的?如果它们不是由抖动处理的,那么抖动会进行什么样的优化,这是即时编译器所独有的? 最佳答案 我可以想象有许多JIT独有的优化;具体来说,