Я пытаюсь сравнить производительность конкретного теста F #, работающего в .NET и Mono 2.10.2 (Windows 7, 64-разрядная версия). Я взял тест Spectral-Norm из Benchmarks Game, следуя традиционному совету SO по использованию System.Diagnostics.StopWatch для тестирования C #, и добавил строки 4, 89-90 и 93-95 в . эта ссылка . Я скомпилировал этот код в Visual Studio 2010 (для среды выполнения 4.0, не для профиля клиента, для любого процессора, с включенным оптимизирующим кодом и хвостовыми вызовами). Скомпилированный код прекрасно работает в .NET (в том числе внутри VS), но когда я запускаю .exe в Mono с «mono shootout_spectralnorm.exe», я получаю следующую ошибку (повторяется в ссылке fssnip.net):
Unhandled Exception: System.TypeInitializationException: An exception was thrown
by the type initializer for System.Diagnostics.Stopwatch ---> System.InvalidPro
gramException: Invalid IL code in System.Diagnostics.Stopwatch:.cctor (): method
body is empty.
--- End of inner exception stack trace ---
at Program.main (System.String[] args) [0x00000] in <filename unknown>:0
Странно то, что когда я удаляю добавленные мной строки (строки 4, 89-90 и 93-95, которые относятся к временной части эталонного теста), ошибка исчезает в Mono и она действует так же, как это происходит в MS .NET. Это просто сбивает меня с толку. Я установил, что все ссылочные сборки в VS должны быть скопированы локально, чтобы они были видны Mono, но может быть некоторая проблема с приоритетом для разных сборок в GAC, которые имеют то же имя, что и имена в локальной папке. Кто-нибудь сталкивался с этой или подобной проблемой, особенно на Windows Mono? Если это так или если вы думаете, что знаете, как можно решить эту проблему, я надеюсь, что вы поможете мне решить ее.