2011-01-17 18 views
8

¿Podría alguien explicarme por qué este trozo de código funciona bien cuando lo ejecuto en una plataforma x86 y por qué falla en x64?La variable no se incrementa en C# Release x64

Resultados:

  • x 86 Depuración: 12345678910
  • x 64 Depuración: 12345678910
  • x86 lanzamiento: 12345678910
  • x64 lanzamiento: 1111111111

Si cambio de algo, como la eliminación una de las variables no utilizadas, o si elimino el inútil for-loop después de p_lFirstId ++, el extraño comportamiento desaparece.

Descubrí que al cambiar "pdb-only" a "full" en la configuración de mi versión, funciona nuevamente.

Si ejecuta el código directamente desde Visual Studio, también lo está haciendo bien.

¿Es esto un error del compilador JIT?

Gracias de antemano.

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()); 
    } 
} 
+0

Limpiar y luego reconstruir la solución, apostaría por alguna razón a que está colgando en una antigua DLL en alguna parte. – msarchet

+4

Encontraste una falla del optimizador de JIT. No estoy cerca de un x64 para verificarlo. Publique esto en connect.microsoft.com, no olvide documentar cuidadosamente qué versión de .NET está usando. De lo contrario, se asemeja a un error en el jitter para 3.5 (no sp1). –

+0

¿Qué sucede si declara una copia local para modificar en lugar de intentar modificar la variable de parámetro? Supongo que eso no sería concluyente, sin embargo, ya que suena como si fuera una especie de Hiesenbug. – Rup

Respuesta

3

Esto es un error en el CLR. Aconsejaría contactar a Microsoft y pedirles que corrijan este error en su próximo lanzamiento.

+0

Lo informo a Microsoft: https://connect.microsoft.com/VisualStudio/feedback/details/636466/variable-is-not-incrementing-in-c-release -x64 – Filimindji

Cuestiones relacionadas