Đoạn mã sau cho đầu ra khác nhau khi chạy bản phát hành bên trong Visual Studio và chạy bản phát hành bên ngoài Visual Studio. Tôi đang sử dụng Visual Studio 2008 và nhắm mục tiêu .NET 3.5. Tôi cũng đã thử .NET 3.5 SP1.Lỗi tiềm năng NET JIT?
Khi chạy bên ngoài Visual Studio, JIT sẽ khởi động. Hoặc (a) có điều gì đó tinh tế xảy ra với C# mà tôi bị thiếu hoặc (b) JIT thực sự là do lỗi. Tôi nghi ngờ rằng JIT có thể đi sai, nhưng tôi đang chạy ra khỏi possiblities khác ...
Output khi chạy bên trong Visual Studio:
0 0,
0 1,
1 0,
1 1,
Output khi chạy phát hành bên ngoài của Visual Studio:
0 2,
0 2,
1 2,
1 2,
Lý do là gì?
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 - một vấn đề lớn nhỏ này là :) –
Vâng - làm thế nào về điều đó: tìm một lỗi nghiêm trọng trong một cái gì đó thiết yếu như .Net JIT - chúc mừng! –
Điều này xuất hiện để repro trong xây dựng ngày 9 tháng 12 của tôi về khung 4.0 trên x86. Tôi sẽ chuyển nó cho nhóm jitter. Cảm ơn! –