草庐IT

JIT即时编译器

全部标签

c# - 这是 C# 4.0 编译器可选参数错误吗?

我正在编写自定义安全属性并出现奇怪的编译器行为...当我在同一个文件中使用该属性时,默认参数值工作正常:usingSystem.Security.Permissions;[System.Serializable]sealedclassFooAttribute:CodeAccessSecurityAttribute{publicFooAttribute(SecurityActionaction=SecurityAction.Demand):base(action){}publicoverrideSystem.Security.IPermissionCreatePermission(){r

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# - 获取对象的完整字符串表示形式(如在 Visual Studio 的即时窗口中)

给定以下示例类:publicclassMyClass{publicstringS{get;set;}publicintI{get;set;}publicDateTimeD{get;set;}privatefloatF{get;set;}privatelongl;publicMyClass(){S="foo";I=42;D=newDateTime(2011,11,11);F=3.14f;l=12435;}}如果我在我的应用程序中有一个此类的实例myClass,请在Debug模式(VisualStudio2010)中单步执行代码,并在某些时候将myClass键入立即窗口,显示以下内容:{M

c# - 如何即时返回方法的完全限定名称?

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.Web.Mvc;namespaceMvcMusicStore.Controllers{publicclassStoreController:Controller{////GET:/Store/publicstringIndex(){return"MvcMusicsStore.Controllers.StoreController.Index";}}}如何即时返回方法的完全限定名称?

c# - 如何在 .csproj 文件中使用 MSBuild 条件测试编译器指令?

我对.csproj文件中的函数和条件完全陌生,因此非常感谢您的帮助。我想做的是检查当前配置中的特定编译器指令。一个示例如下所示:......我不知道这是否可能。如果有更好的方法来做我要问的事情,也请告诉我。无论哪种方式,我都想测试配置的独立条件。编辑我真正想要的是一个我可以轻松编辑的值,最好是在VisualStudio中,我还可以不考虑配置检查。我想到了编译器常量,因为您可以在VS的项目属性中轻松更改它们。 最佳答案 编译器常量被设置到属性“DefineConstants”中,因此您应该能够评估该属性。您的Choose语句需要在定义

c# - 为什么编译器为 "yield"生成的枚举器不是结构?

compiler-generatedimplementation的IEnumerator/IEnumerable对于yieldmethods和getters似乎是一个类,因此分配在堆上。但是,其他.NET类型,例如List具体返回struct枚举数以避免无用的内存分配。通过对C#深入帖子的快速概述,我看不出为什么这里也不是这种情况。我错过了什么吗? 最佳答案 Servy正确回答了您的问题——您在评论中自己回答的问题:Ijustrealizedthatsincethereturntypeisaninterface,itwouldget

C#编译器增强建议

想象一下有人编写以下代码:strings="SomeString";s.ToUpper();我们都知道,在上面的例子中,调用“ToUpper()”方法是没有意义的,因为返回的字符串根本没有被处理。但是,许多人犯了这个错误,并花时间通过问自己“为什么我的‘s’变量上的字符没有大写”来解决问题????那么,如果有一个属性可以应用于“ToUpper()”方法,如果不处理返回对象就会产生编译器错误,那不是很好吗?类似于以下内容:[MustHandleReturnValueAttribute]publicstringToUpper(){…}如果为了让这段代码正确编译,用户必须像这样处理返回值:s

c# - 强制 .NET JIT 编译器在应用程序启动期间生成最优化的代码

我正在用C#编写一个DSP应用程序(基本上是一个多轨编辑器)。我已经在不同的机器上对它进行了很长一段时间的分析,我注意到了一些“奇怪”的事情。在我的家用机器上,播放循环的第一次运行占用了大约50%-60%的可用时间(我假设这是由于JIT完成它的工作),然后对于后续循环,它下降到稳定的5%消耗。问题是,如果我在较慢的计算机上运行该应用程序,第一次运行会占用比可用时间更多的时间,导致播放中断并弄乱输出音频,这是NotAcceptable。之后,它会下降到8%-10%的消耗。即使在第一次运行后,应用程序仍然不时调用一些耗时的例程(大约每2秒一次),这导致稳定的5%消耗经历了20%-25%的非

c# - 编译器错误 : "error CS0307: The variable ' int' cannot be used with type arguments"

如果我有以下代码:privatevoidCheck(boola,boolb){}privatevoidCheck(inta,intb,intc,boolflag){Check(a(flag?c:b-10));}我在调用Check(int,int)时遇到编译时错误:errorCS0307:Thevariable'int'cannotbeusedwithtypearguments我也遇到了这些错误:errorCS0118:'b'isavariablebutisusedlikeatypeerrorCS0118:'a'isavariablebutisusedlikeatype为什么会出现这些错

c# - 我认为我的团队在 64 位编译器中发现了一个错误,其他人可以确认或告诉我为什么这是正确的吗?

我有一个关于此可能错误的简单无尘室示例。staticvoidMain(string[]args){boolMyFalse=false;if(MyFalse){thrownewException();}try{inti=0;}catch(Exceptione){Console.Write(e);}Console.Read();}如果在x64或AnyCPU中编译(当prefer32bit在VS2012中设置为false时)如果你在ifblock中放置断点,它总是会被命中。我们在VS2012、VS2010和VS2008中尝试过,它们在64位编译时都触发了ifblock,但在32位中它不会触发