草庐IT

MySQL性能优化

全部标签

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)优化可以确保

c# - 使用 C# 删除大量(>100K)文件,同时保持 Web 应用程序的性能?

我正在尝试从一个位置删除大量的文件(我的意思是超过100000个),因此该操作是从网页启动的。显然我可以使用string[]files=System.IO.Directory.GetFiles("pathwithfilestodelete");foreach(varfileinfiles){IO.File.Delete(file);}Directory.GetFileshttp://msdn.microsoft.com/en-us/library/wz42302f.aspx这个方法已经发过几次了:Howtodeleteallfilesandfoldersinadirectory?和De

c# - 资源 (.resx) 文件是否存在任何性能问题或注意事项?

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭1年前。Improvethisquestion资源文件似乎非常适合标签和消息的本地化,但它们是否完美?例如:如果资源量很大,有没有更好的解决方案?就像.resx文件中的100,000个字符串?(理论上,我实际上没有这个问题)这是存储其他类型数据(例如图像、图标、音频文件、常规文件等)的好方法吗?将.resx文件存储在独立项目中以便于更新/编译是否是最佳做法?您在使用.resx文件时是否遇到过任何其他问题?

c# - 使用性能计数器计算平均值

我有一个服务进程,我想使用性能计数器来发布完成任务所需的平均时间。我正在使用AverageTimer32计数器来执行此操作。它几乎按照我想要的方式工作,但不完全是这样:当我增加计数器时,它会短暂地上升到我期望的值(在性能监视器中观察),但然后它会立即回落到零。所以,计数器为零,我运行一个任务,任务完成,计数器短暂地增加(到正确的值),但随后它几乎立即回落到零。我正在使用以AverageBase作为分母的AverageTimer32计数器。每次开始任务时,我将AverageBase增加1,然后每次完成任务时,我将AverageTimer32增加要完成的滴答数。谁能给我一个推?

c# - 在 C# 中使用多个键优化缓存 - 删除对象的重复

我在Asp.NetCore中有一个项目。这个项目有一个ICacheService如下:publicinterfaceICacheService{TGet(stringkey);TGet(stringkey,Funcgetdata);TaskGet(stringkey,Func>getdata);voidAddOrUpdate(stringkey,objectvalue);}实现只是基于ConcurrentDictionary,所以它并没有那么复杂,只是从这个字典中存储和检索数据。在我的一项服务中,我有如下方法:publicasyncTask>GetLanguagesAsync(stri

C# 编译器优化

我想知道是否有人可以向我解释编译器到底做了什么让我观察到一个简单方法的性能差异如此之大。publicstaticuintCalculateCheckSum(stringstr){char[]charArray=str.ToCharArray();uintcheckSum=0;foreach(charcincharArray){checkSum+=c;}returncheckSum%256;}我正在与一位同事合作,为消息处理应用程序做一些基准测试/优化。在VisualStudio2012中使用相同的输入字符串对此函数进行1000万次迭代大约需要25秒,但是当使用“优化代码”选项构建项目时

c# - 素数生成器的 F# 与 C# 性能对比

我注意到F#和C#中看似等效的代码执行起来并不相同。F#慢了一个数量级。作为示例,我提供了我的代码,它在F#和C#中生成素数/给出第n个素数。我的F#代码是:letrecisprimex=primes|>Seq.takeWhile(funi->i*iSeq.forall(funi->x%i0)andprimes=seq{yield2yield!(Seq.unfold(funi->Some(i,i+2))3)|>Seq.filterisprime}letn=1000letstart=System.DateTime.Nowprintfn"%d"(primes|>Seq.nthn)letdu

c# - 优化 LINQ Count() > X

这个问题在这里已经有了答案:EfficientLinqEnumerable's'Count()==1'test(7个答案)关闭6年前。问题:给定IEnumerable,如何检查包含超过x的序列项目?MCVE:staticvoidMain(string[]args){vartest=Test().Where(o=>o>2&&o1)//howtooptimizethis?foreach(vartintest)//consumerConsole.WriteLine(t);}staticIEnumerableTest(){for(inti=0;i这里的问题是什么Count()将运行完整的序列,