Il codice seguente fornisce output diversi durante l'esecuzione del rilascio in Visual Studio e l'esecuzione del rilascio all'esterno di Visual Studio. Sto usando Visual Studio 2008 e il targeting .NET 3.5. Ho anche provato .NET 3.5 SP1.Errore potenziale JIT .NET?
Quando si esegue all'esterno di Visual Studio, il JIT dovrebbe dare il via. O (a) c'è qualcosa di sottile in C# che mi manca o (b) il JIT è effettivamente in errore. Sono dubbioso che il JIT può sbagliare, ma io sono a corto di altri possiblities ...
uscita durante l'esecuzione all'interno di Visual Studio:
0 0,
0 1,
1 0,
1 1,
uscita durante l'esecuzione di rilascio al di fuori di Visual Studio:
0 2,
0 2,
1 2,
1 2,
Qual è il motivo?
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();
}
}
}
+1 - che piccolo problema questo è :) –
Sì, che ne dici: trovare un bug serio in qualcosa di così essenziale come .Net JIT - congratulazioni! –
Questo sembra essere riprodotto nella mia 9a build del framework 4.0 su x86. Lo passerò alla squadra di jitter. Grazie! –