草庐IT

物流运输优化

全部标签

具有尾递归优化的 C# 编译?

基于丰富的stackoverflow,我一直在断断续续地回答尾递归优化是否针对特定的c#代码进行。几个问题似乎在谈论对正在发布的较新版本的.net进行优化的推测将应用构建为x64位应用以实现优化在VisualStudio中从调试版本切换到发布版本以实现优化根本没有优化,并且微软社区声称他们不会针对“安全问题”进行尾递归优化(并没有真正理解这一点)它是随机发生的那么从C#4.0(VisualStudio2013/2015)开始,如果可以确保尾递归优化,如何确保它呢? 最佳答案 可以支持尾调用优化的不同级别。JIT实际上负责任何.NET

c# - 编译器是否优化对 const 变量和文字 const 数字的操作?

假设我有一个带字段的类:constdoublemagicalConstant=43;这是代码中的某处:doublerandom=GetRandom();doubleunicornAge=random*magicalConstant*2.0;编译器是否会优化我的代码,使其不会在每次计算unicornAge时都计算magicalConstant*2.0?我知道我可以定义下一个将这个乘法考虑在内的常量。但这在我的代码中看起来更清晰。编译器对其进行优化是有意义的。 最佳答案 (这个问题是thesubjectofmybloginOctober

c# - C# 中最重要的优化性能最佳实践是什么

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭1年前。Improvethisquestion当我在阅读thistutorial我注意到以下有关在C#中使用结构的性能提示:Unlessyouneedreferencetypesemantics,aclassthatissmallerthan16bytesmaybemoreefficientlyhandledbythesystemasastruct.我在stackoverflow中查找了类似的问题,并在ADO.Net中找到了一些关于性

c# - c# 编译器是否优化 Count 属性?

Listlist=...for(inti=0;i那么编译器是否知道list.Count不必每次迭代都调用? 最佳答案 你确定吗?Listlist=newList{0};for(inti=0;i如果编译器缓存了上面的Count属性,list的内容将是0和1。如果没有缓存,内容将是从0到100.现在,这对您来说可能看起来像是一个人为的例子;但是这个呢?Listlist=newList();inti=0;while(list.Count这两个代码片段似乎完全不同,但这只是因为我们倾向于思考for循环与while循环。在任何一种情况下,每次

c# - 将 Surface 保存为位图并在 C# 中优化 DirectX 屏幕捕获

经过一整天的测试,我想出了这段代码,它使用DirectX(SlimDX)捕获当前屏幕并将其保存到一个文件中:Deviced;publicDxScreenCapture(){PresentParameterspresent_params=newPresentParameters();present_params.Windowed=true;present_params.SwapEffect=SwapEffect.Discard;d=newDevice(newDirect3D(),0,DeviceType.Hardware,IntPtr.Zero,CreateFlags.SoftwareV

c# - 为什么尾调用优化需要操作码?

所以I'vereadmanytimesbefore从技术上讲,.NET确实支持尾调用优化(TCO),因为它具有适用于它的操作码,而只是C#不生成它。我不确定为什么TCO需要操作码或它会做什么。据我所知,能够做到TCO的要求是递归调用的结果不与当前函数范围内的任何变量相结合。如果你没有那个,那么我看不出操作码如何阻止你必须保持堆栈框架打开。如果确实有,那么编译器就不能总是轻松地将它编译成迭代的东西吗?那么操作码有什么意义呢?显然我缺少一些东西。在TCO完全可能的情况下,难道不能总是在编译器级别而不是在操作码级别处理它吗?有什么地方不能的例子? 最佳答案

c# - JIT 编译器的 IL 优化

我正在开发一个发出IL代码的编译器。重要的是,生成的IL由Mono和Microsoft.NETJIT编译器JIT为尽可能最快的机器代码。我的问题是:优化以下模式是否有意义:'stloc.0;ldloc.0;ret'=>'ret''ldc.i4.0;conv.r8'=>'ldc.r8.0'等等,或者JIT是否足够聪明来处理这些?是否有包含Microsoft/MonoJIT编译器执行的优化列表的规范?是否有任何关于优化IL的实用建议/最佳实践的好读物,以便JIT编译器可以反过来生成最佳机器代码(性能方面)? 最佳答案 您描述的两种模式是

c# - .NET JIT 编译器可变优化

https://msdn.microsoft.com/en-us/magazine/jj883956.aspxConsiderthepollinglooppattern:privatebool_flag=true;publicvoidRun(){//Set_flagtofalseonanotherthreadnewThread(()=>{_flag=false;}).Start();//Pollthe_flagfielduntilitissettofalsewhile(_flag);//Theloopmightneverterminate!}Inthiscase,the.NET4.5J

c# - 在优化使用时让 ReSharper 保留 'using System;'

我想知道是否有一些选项可以防止ReSharper仅删除usingSystem;指令?也许这可以在某处配置?另外,有没有办法让ReSharper像VisualStudio2008那样对剩余的指令进行排序(我认为是按字母顺序)?谢谢。 最佳答案 是的,有这么一个选项:ReSharper->Languages->C#->NamespaceImports。您可以添加不应删除的namespace,以及应始终导入的namespace。 关于c#-在优化使用时让ReSharper保留'usingSys

c# - 优化 C# 文件 IO

场景-150MB的文本文件,它是旧电子邮件帐户的导出收件箱。需要解析并提取来自特定用户的电子邮件,并将这些电子邮件写入一个新的单个文件。我有可用的代码,它只是太慢了。我正在使用标记字符串来搜索从原始文件开始/结束副本的位置。这是主要功能:StreamReadersr=newStreamReader("c:\\Thunderbird_Inbox.txt");stringworking=string.Empty;stringmystring=string.Empty;while(!sr.EndOfStream){while((mystring=sr.ReadLine())!=null){i