草庐IT

Feign的性能优化

全部标签

c# - 我可以强制编译器优化特定方法吗?

是否有一个属性可以用来告诉编译器必须始终优化方法,即使未设置全局/o+编译器开关?我问的原因是因为我在玩弄基于现有方法的IL代码动态创建方法的想法;当代码经过优化时,我想做的操作相当容易,但在未优化的代码中变得非常困难,因为编译器生成了额外的指令。编辑:关于困扰我的非优化的更多细节......让我们考虑以下阶乘函数的实现:staticlongFactorialRec(intn,longacc){if(n==0)returnacc;returnFactorialRec(n-1,acc*n);}(注意:我知道有更好的方法来计算阶乘,这只是一个例子)启用优化后生成的IL非常简单:IL_000

c# - C# 编译器的图像调试选项如何影响 .NET JIT 编译性能(包括动态方法)?

我正在尝试优化我的应用程序,使其在启动后立即运行良好。目前,它的发行版包含304个二进制文件(包括外部依赖项),总计57兆字节。它是一个WPF应用程序,主要执行数据库访问,没有任何重要的计算。我发现调试配置为大多数操作提供了更好的(~5倍增益)时间,因为它们是在应用程序进程的生命周期中首次执行的。例如,在NGENedDebug中打开应用内的特定屏幕需要0.3秒,JITtedDebug需要0.5秒,NGENedRelease需要1.5秒,JITtedRelease需要2.5秒。据我所知,JIT编译时间的差距是由JIT编译器对发布二进制文件应用更积极的优化造成的。据我所知,调试和发布配置的

C# Double.ToString() 性能问题

我有以下方法将double组转换为List:staticDestTest(Sources){Destd=newDest();if(s.A24!=null){double[]dd=s.A24;intcnt=dd.Length;Listlst=newList();for(inti=0;i根据我的基准测试,在循环中执行List.Add()似乎是最快的方法,超过了所有各种LINQ和Convert技巧。这真的很慢。一百万次调用需要2400毫秒(任何CPU,首选64位)。所以我正在尝试各种方法来让它更快。假设我显然无法缓存源或目标列表等。所以无论如何,我在这里偶然发现了一些奇怪的东西......如

c# - 从顶点组合中找到最小的不规则多边形(性能关键)

我需要在二维平面上的几个顶点中找到一个表面积最小的不规则多边形。不,这不是家庭作业。虽然我希望我现在回到学校。对于如何构建多边形有一些要求。假设我在8x8网格上绘制了3种不同类型的顶点(红色、绿色、蓝色)。我需要扫描此网格中满足红、绿、蓝组合要求的所有顶点,并选择表面积最小的顶点。获取不规则多边形的表面积非常简单。我主要关心的是高效扫描所有可能组合的性能。有关示例,请参见下图。所有三种类型都用于制作多边形,但圈出的一种具有最小的表面积,这是我的目标。与我尝试制作的原型(prototype)相比,这个场景得到了简化。多边形将由数十个(如果不是数百个)顶点构成,并且网格将大得多。此外,这将

c# - ASP.NET MVC URL 生成性能

ASP.NETMVC的一个小基准测试。查看页面代码:publicstringBechmark(Funcurl){vars=newStopwatch();varn=1000;s.Reset();s.Start();for(inti=0;i";}查看代码:Url.Action("Login","Account"))%>Url.Action("Login","Account",new{username="bla",password="bla2",returnurl="blabla32",rememberme=false}))%>Html.BuildUrlFromExpression(a=>a

c# - 尝试优化模糊匹配

我有2,500,000个产品名称,我想尝试将它们组合在一起,即找到名称相似的产品。例如,我可以拥有三种产品:亨氏焗bean400g;HzBkdbean400g;亨氏bean400克。它们实际上是相同的产品,可以合并在一起。我的计划是使用Jaro–Winklerdistance的实现查找匹配项。该过程如下:列出内存中所有产品名称的大列表;选择列表中的第一个产品;将其与列表中紧随其后的每个产品进行比较并计算“Jaro分数”;任何匹配度高(比如0.95f或更高)的产品都会被报告;转到下一个产品。所以这有一些优化,因为它只以一种方式匹配每个产品,节省了一半的处理时间。我对此进行了编码并进行了测

c# - 性能问题 : comparing to String. 格式

不久前,JonSkeet的一篇文章在我脑海中植入了构建一个CompiledFormatter类的想法,用于在循环中使用而不是String.Format()。这个想法是对String.Format()的调用部分花在解析格式字符串上的开销;我们应该能够通过将该代码移出循环来提高性能。当然,诀窍是新代码应该完全匹配String.Format()行为。这周我终于做到了。我经历了使用.NetframeworksourceprovidedbyMicrosoft直接调整他们的解析器(事实证明String.Format()实际上将工作交给了StringBuilder.AppendFormat())。我

c# - 何时使用 volatile 来抵消 C# 中的编译器优化

我花了大量时间在C#4.0中进行多线程编码。然而,有一个问题对我来说仍然没有答案。我知道volatile关键字会阻止编译器将变量存储在寄存器中,从而避免无意中读取过时的值。写入在.Net中总是易变的,因此任何说明它还避免过时写入的文档都是多余的。我也知道编译器优化有点“不可预测”。以下代码将说明由于编译器优化(在VS之外运行发布编译时)导致的停顿:classTest{publicstructData{publicint_loop;}publicstaticDatadata;publicstaticvoidMain(){data._loop=1;Testtest1=newTest();n

c# - 数组(结构类型)上的 Where 是否经过优化以避免不必要的结构值复制?

出于内存性能的原因,我有一个结构数组,因为项目的数量很大,并且项目会定期被抛出,因此会扰乱GC堆。这不是我是否应该使用大型结构的问题;我已经确定GC垃圾处理会导致性能问题。我的问题是当我需要处理这个结构数组时,我应该避免使用LINQ吗?由于结构不小,按值传递它是不明智的,而且我不知道LINQ代码生成器是否足够智能以执行此操作。结构如下所示:publicstructManufacturerValue{publicintManufacturerID;publicstringName;publicstringCustomSlug;publicstringTitle;publicstringD

c# - C# 编译器或 JIT 能否优化掉 lambda 表达式中的方法调用?

我是在关于另一个StackOverflow问题的讨论(incomments)之后开始这个问题的,我很想知道答案。考虑以下表达式:varobjects=RequestObjects.Where(r=>r.RequestDate>ListOfDates.Max());移动ListOfDates.Max()的评价有没有(性能)优势?在这种情况下,在Where子句之外,还是会1.编译器或2.JIT优化它?我相信C#只会在编译时进行常量折叠,并且可以说ListOfDates.Max()在编译时无法知道,除非ListOfDates本身在某种程度上是常量。也许还有另一个编译器(或JIT)优化可以确保