gpt4 book ai didi

f# - 在 Mono 上运行 F# 基准测试时的运行时异常

转载 作者:行者123 更新时间:2023-12-04 06:23:46 24 4
gpt4 key购买 nike

我正在尝试比较在 .NET 和 Mono 2.10.2(Windows 7,64 位)上运行的特定 F# 基准测试的性能。我拿了Spectral-Norm benchmark来自 Benchmarks Game 遵循使用 System.Diagnostics.StopWatch 对 C# 进行基准测试的传统 SO 建议,并在 this link 添加了第 4、89-90 和 93-95 行.我在 Visual Studio 2010 中编译了这段代码(对于运行时 4.0,不是客户端配置文件,任何 CPU,优化代码和尾调用打开)。编译后的代码在 .NET 上运行得很好(包括在 VS 中),但是当我在 Mono 上使用“mono shotout_spectralnorm.exe”运行 .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 上?如果是这样,或者如果您认为您知道如何解决此问题,我希望您能帮助我解决它。

最佳答案

引用程序集(通常)没有代​​码——它们只是 API 签名(足够的信息供编译器在设计时/编译时引用它们)。您需要复制运行时程序集而不是引用程序集才能运行它。 (您经常会在 GAC 中找到运行时程序集。)

关于f# - 在 Mono 上运行 F# 基准测试时的运行时异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6260241/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com