.NET JIT möglichen Fehler?

Den folgenden code gibt verschiedene Ausgabe beim ausführen des release in Visual Studio, und das ausführen des release außerhalb von Visual Studio. Ich bin mit Visual Studio 2008 und targeting .NET 3.5. Ich hab auch schon versucht .NET 3.5 SP1.

Ausführung außerhalb von Visual Studio, die JIT-kick sollte. Entweder (a) gibt es etwas subtiler geht mit C#, die mir fehlt oder (b) der JIT ist tatsächlich ein Fehler vorliegt. Ich bin zweifelhaft, dass der JIT-kann schief gehen, aber ich bin keine andere Möglichkeiten...

Ausgegeben, wenn die Ausführung in Visual Studio:

    0 0,
    0 1,
    1 0,
    1 1,

Ausgabe beim ausführen release außerhalb von Visual Studio:

    0 2,
    0 2,
    1 2,
    1 2,

Was ist der Grund?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Test
{
    struct IntVec
    {
        public int x;
        public int y;
    }

    interface IDoSomething
    {
        void Do(IntVec o);
    }

    class DoSomething : IDoSomething
    {
        public void Do(IntVec o)
        {
            Console.WriteLine(o.x.ToString() + " " + o.y.ToString()+",");
        }
    }

    class Program
    {
        static void Test(IDoSomething oDoesSomething)
        {
            IntVec oVec = new IntVec();
            for (oVec.x = 0; oVec.x < 2; oVec.x++)
            {
                for (oVec.y = 0; oVec.y < 2; oVec.y++)
                {
                    oDoesSomething.Do(oVec);
                }
            }
        }

        static void Main(string[] args)
        {
            Test(new DoSomething());
            Console.ReadLine();
        }
    }
}
  • Ja - wie wärs damit: Suche nach einem gravierenden Fehler in etwas so wichtig wie die .Net JIT - herzlichen Glückwunsch!
  • Dies scheint zu repro in meinem 9. Dezember bauen die 4.0 framework auf x86. Ich werde es weitergeben, um die jitter-team. Danke!
  • Dies ist eine der wenigen Fragen, die verdienen eine gold-Abzeichen.
  • Die Tatsache, dass wir alle daran interessiert sind, diese Frage zeigt, erwarten wir nicht, dass bugs in der .NET JIT, gut gemacht Microsoft.
  • Wir alle warten auf Microsoft Antworten gespannt .....
  • Dies ist derzeit die höchsten Punktzahlen Frage bei StackOverflow unter jenen, die weniger als 10.000 Aufrufe.

InformationsquelleAutor Philip Welch | 2010-01-13
Schreibe einen Kommentar