Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 什么是COMPLUS_ZapDisable?为什么默认情况下不设置它?_.net_Visual Studio_Debugging_Optimization - Fatal编程技术网

.net 什么是COMPLUS_ZapDisable?为什么默认情况下不设置它?

.net 什么是COMPLUS_ZapDisable?为什么默认情况下不设置它?,.net,visual-studio,debugging,optimization,.net,Visual Studio,Debugging,Optimization,我知道设置COMPLUS_ZapDisable=1将“禁用Visual Studio中的调试优化”,但我似乎找不到任何参考来告诉我这到底意味着什么 此设置实际上禁用了哪些功能 始终使用此设置的后果是什么 如果成本是“[调试]运行稍微慢一点”,我们可以试着详细说明一下吗?差异显著吗?这种差异会随着项目规模的扩大而扩大吗?在更大的项目上,这是无法忍受的吗?等 我知道这个有点模糊,但解释才是我真正想要的 是否有一个实际已知的原因来解释为什么这不是默认设置的? 虽然意见是受欢迎的,但我真的很想知

我知道设置
COMPLUS_ZapDisable=1
将“禁用Visual Studio中的调试优化”,但我似乎找不到任何参考来告诉我这到底意味着什么

  • 此设置实际上禁用了哪些功能
  • 始终使用此设置的后果是什么
  • 如果成本是“[调试]运行稍微慢一点”,我们可以试着详细说明一下吗?差异显著吗?这种差异会随着项目规模的扩大而扩大吗?在更大的项目上,这是无法忍受的吗?等
    • 我知道这个有点模糊,但解释才是我真正想要的
  • 是否有一个实际已知的原因来解释为什么这不是默认设置的?
    • 虽然意见是受欢迎的,但我真的很想知道是否有一个事实,即在默认情况下禁用此设置可以解决的已知问题

此环境变量禁用抖动中的优化


抖动会自动禁用调试生成的优化,因此这仅在您希望通过非调试生成(例如,框架程序集)进行调试时才相关。

设置环境变量COMPlus_ZapDisable=1将禁用所有NGEN映像(*.ni.dll)。它也可以在注册表中设置,但不建议这样做,因为它会影响所有.NET应用程序。通常,只有在调试应用程序以获得更好的调用堆栈时才使用此选项。为了获得更好的性能,您可以仅对具有环境变量COMPlus_disableativeImageLoadList(仅64位,需要.NET 4.6+)的某些程序集禁用NGEN映像

有关详细说明,请参见:


(在当前CoreCLR中,似乎已删除DisableativeImageLoadList。)

为什么默认情况下不设置此选项?Hans Passant在OP的评论中回答说,后续操作可能是GUI中的一个选项。您看到了吗?Zap似乎是NGEN的代码名。@usr-我确实读过那篇文章,但我错过了上面说Zap是NGEN代码名的部分。现在我重读了一遍,我发现它有点含蓄。我将尝试从这个角度进行更多的研究。谢谢你澄清这一点!在.NETFramework源代码中单步执行是非常痛苦的,它是经过优化的代码,这会阻止检查局部变量,并使语句的执行顺序相当随机。当然,这样做会使程序变慢。没什么大不了的,您自己的代码也比较慢,所以您通常只能使用小数据集进行有效调试。默认设置毫无意义,您总是希望框架代码尽可能快地运行。只有在必要的时候才这样做。谢谢,汉萨桑。这就把事情弄清楚了很多。