Возможная проблема .NET x86 JIT?

Следующий код ведет себя по-разному, когда он построен в режиме Release (или отладка с оптимизацией) и запускается без подключенного отладчика Visual Studio.

Похоже, что репликация возможна только при использовании x86 JITter. Я тестировал это на машине x86, а также работал в WOW64 на машине x64 (установив целевую платформу на x86).

Я пробовал это только с .NET 4.0.

При работе вне отладчика в Release я вижу:

Value is 4

При запуске внутри отладчика часть e.Value.Length Вызов WriteLine вызывает NullReferenceException , чего я и ожидал.

Код:

namespace Test
{
    class UsingReleasable<T>
    {
        public UsingReleasable(T obj)
        {
            m_obj = obj;
        }

        public T Release()
        {
            T tmp = m_obj;
            m_obj = default(T);
            return tmp;
        }

        public T Value
        {
            get { return m_obj; }
        }

        T m_obj;
    }

    class Program
    {
        static void Main(string[] args)
        {
            var e = new UsingReleasable<string>("test");
            e.Release();
            System.Console.WriteLine("Value is {0}", e.Value.Length);
        }
    }
}

Мой просмотр кода, созданного JIT, заставляет меня думать, что это ошибка в этот фрагмент, но я хотел дважды проверить здесь, прежде чем пересылать его в MS Connect.

34
задан FatKenny 11 July 2011 в 22:17
поделиться