2011-01-17 8 views
8

Czy ktoś mógłby mi wyjaśnić, dlaczego ten fragment kodu działa dobrze, gdy uruchamiam go na platformie x86 i dlaczego nie działa na x64?Zmienna nie jest inkrementująca w wydaniu C# x64

Wyniki:

  • x86 Debug: 12345678910
  • 64 Debug: 12345678910
  • x86 wydania: 12345678910
  • 64 Release: 1111111111

Gdybym coś zmienić, jak usuwanie jedną z nieużywanych zmiennych lub jeśli usunę niepotrzebną pętlę for po p_lFirstId ++, dziwne zachowanie zniknie.

Znalazłem, że zmiana "pdb-only" na "full" w mojej konfiguracji wydania, to znowu działa.

Jeśli uruchamiasz kod bezpośrednio ze studia graficznego, to też działa dobrze.

Czy jest to błąd kompilatora JIT?

Z góry dziękuję.

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

Oczyść, a następnie przebuduj rozwiązanie, założę się z jakiegoś powodu, że gdzieś jest zawieszony na starej bibliotece DLL. – msarchet

+4

Znalazłeś błąd optymalizatora JIT. Nie jestem blisko x64, żeby to sprawdzić. Opublikuj to w witrynie connect.microsoft.com, nie zapomnij o dokładnym udokumentowaniu używanej wersji .NET. W przeciwnym razie przypomina błąd w jitterze dla 3.5 (nie sp1). –

+0

Co się stanie, jeśli zadeklarujesz lokalną kopię do modyfikacji zamiast modyfikować zmienną parametru? Myślę, że nie byłoby to rozstrzygające, ponieważ brzmi jak coś w rodzaju Hiesenbuga. – Rup

Odpowiedz

3

To jest błąd w CLR. Radziłbym skontaktować się z firmą Microsoft i poprosić o poprawienie tego błędu w następnym wydaniu.

+0

Zgłaszam to Microsoft: https://connect.microsoft.com/VisualStudio/feedback/details/636466/variable-is-not-incrementing-in-c-release -x64 – Filimindji