变量在 C# Release x64 中不递增

Posted

技术标签:

【中文标题】变量在 C# Release x64 中不递增【英文标题】:Variable is not incrementing in C# Release x64 【发布时间】:2011-01-17 16:13:39 【问题描述】:

有人可以向我解释为什么这段代码在 x86 平台上执行时运行良好,为什么在 x64 上失败?

结果:

x86 调试:12345678910 x64 调试:12345678910 x86 版本:12345678910 x64 版本:1111111111

如果我改变一些东西,比如删除一个未使用的变量,或者如果我在 p_lFirstId++ 之后删除了无用的 for 循环,奇怪的行为就会消失。

我发现在我的发布配置中将“pdb-only”更改为“full”,它又可以工作了。

如果您直接从 Visual Studio 运行代码,它也运行良好。

这是 JIT 编译器的错误吗?

提前谢谢你。

class Program

    static void Main(string[] args)
    
        Test(null, null, null, 0, 1);            
    

    public static void Test(
        List<string> liste, List<string> unused1,
        string unused2, int unused3, long p_lFirstId)
    
        liste = new List<string>();

        StringBuilder sbSql = new StringBuilder();

        for (int i = 0 ; i < 10 ; i++)
        
            sbSql.Append(p_lFirstId);
            p_lFirstId++;                

            foreach (string sColonne in liste)
            

            

        

        System.Console.WriteLine(sbSql.ToString());
     

【问题讨论】:

清理然后重建解决方案,我敢打赌它出于某种原因挂在某处的旧 DLL 上。 您发现了一个 JIT 优化器错误。我不接近 x64 来检查它。将此发布到 connect.microsoft.com,不要忘记仔细记录您使用的 .NET 版本。否则,它类似于 3.5(不是 sp1)的抖动中的错误。 如果您声明要修改的本地副本而不是尝试修改参数变量会发生什么?不过,我想这不是结论性的,因为这听起来像是某种 Hiesenbug。 我用 .NET 3.5 和 .NET 4 测试过。同样的错误。 抱歉,重建解决方案不起作用 ;) 【参考方案1】:

这是 CLR 中的一个错误。我建议联系 Microsoft 并要求他们在下一个版本中更正此错误。

【讨论】:

我向微软报告:connect.microsoft.com/VisualStudio/feedback/details/636466/…

以上是关于变量在 C# Release x64 中不递增的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio中Debug与Release以及x86x64Any CPU的区别

为啥 j 在 (++i || ++j) 中不递增

指针在 printf 语句中不递增?

C#的for循环使用方法

无法在 Vista x64 的 C# 应用程序中加载 C++ DLL

POPTEST老李谈Debug和Release的区别(c#)2