草庐IT

多目标优化

全部标签

c# - 安装 Framework 4.5 时以 .NET Framework 4 为目标

我的计算机上安装了VS2010和VS2012,并安装了.NETFramework4.0,然后我将其升级到.NETFramework4.5。但是,我仍在开发需要在.NETFramework4.0上运行的应用程序。该项目表示它的目标是.NETFramework4(客户端配置文件),程序集甚至指向ReferencedAssemblies下的.NETFramework4.0文件夹。当我将这个应用程序移动到一台只有4.0的机器时,问题就来了,它不会启动并出现错误,直接的问题是WindowState={BindingWindowState}导致的异常,你可以'在4.0中不能,但在4.5中可以。我需

C#,奇怪的优化

我正在尝试阅读我编译的C#代码。这是我的代码:using(OleDbCommandinsertCommand=newOleDbCommand("...",connection)){//dosuperstuff}但是!我们都知道using会被翻译成这样:{OleDbCommandinsertCommand=newOleDbCommand("...",connection)try{//dosuperstuff}finally{if(insertCommand!=null)((IDisposable)insertCommand).Dispose();}}(因为OleDbCommand是引用类

具有尾递归优化的 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# - 在 .NET Core 中设置自定义 <OutputPath>(停止添加框架目标)?

这个问题在这里已经有了答案:HowdoIset`OutputPath`inaVisualStudio2017project(new.csprojfileformat)withoutthetargetframeworkclutteringtheresolvedpath?(2个答案)关闭5年前。在传统的.NET应用程序中,可以设置自定义.csproj中的一个组件文件(或通过项目属性对话框)。例如的路径bin\$(Configuration)\$(Platform)结果bin\Debug\AnyCPU.我有独立于当前构建配置设置这些值的习惯(在它自己的ItemGroup中,连同Documen

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# - 项目 X 的​​目标是 '.NETStandard,Version=v1.6' 。它不能被以 '.NETFramework,Version=v4.6.1' 为目标的项目引用

我真的很想成为一个好公民...将我所有的类(class)复制到.net标准1.6库中。只是为了发现我的测试DLL不能使用它。我收到以下错误ProjectXtargets'.NETStandard,Version=v1.6'.Itcannotbereferencedbyaprojectthattargets'.NETFramework,Version=v4.6.1'.当然,当我检查.NetStandard(https://learn.microsoft.com/en-us/dotnet/articles/standard/library)时,它说1.6可以针对4.6.1。我尝试了4.6.

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

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