2011-01-17 4 views
8

Qualcuno potrebbe spiegarmi perché questo pezzo di codice sta andando bene quando lo eseguo su una piattaforma x86 e perché non funziona su x64?La variabile non sta incrementando in C# Release x64

Risultati:

  • x86 Debug: 12345678910
  • x64 Debug: 12345678910
  • x86 di uscita: 12345678910
  • x64 di uscita: 1111111111

Se cambio qualcosa, come la rimozione una delle variabili inutilizzate, o se rimuovo il ciclo for inutile dopo p_lFirstId ++, lo strano comportamento scompare.

Ho trovato che cambiando "pdb-only" a "pieno" nella mia configurazione di rilascio, è di nuovo lavoro.

Se si esegue il codice direttamente da Visual Studio, sta andando bene anche.

Si tratta di un bug del compilatore JIT?

Grazie in anticipo.

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

Pulire quindi ricostruire la soluzione, scommetterei per qualche motivo che si aggiri su una vecchia DLL da qualche parte. – msarchet

+4

Hai trovato un bug di ottimizzazione JIT. Non sono vicino a un x64 per controllarlo. Pubblicalo su connect.microsoft.com, non dimenticare di documentare attentamente la versione di .NET che stai utilizzando. In caso contrario, è simile a un bug nel jitter per 3.5 (non sp1). –

+0

Cosa succede se si dichiara una copia locale da modificare piuttosto che tentare di modificare la variabile parametro? Immagino che non sarebbe conclusivo, però, dal momento che sembra che sia un Hiesenbug di sorta. – Rup

risposta

3

Questo è un bug nel CLR. Vorrei consigliare di contattare Microsoft e chiedergli di correggere questo bug nella prossima versione.

+0

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