.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源代码中单步执行是非常痛苦的,它是经过优化的代码,这会阻止检查局部变量,并使语句的执行顺序相当随机。当然,这样做会使程序变慢。没什么大不了的,您自己的代码也比较慢,所以您通常只能使用小数据集进行有效调试。默认设置毫无意义,您总是希望框架代码尽可能快地运行。只有在必要的时候才这样做。谢谢,汉萨桑。这就把事情弄清楚了很多。