将 C# 代码反汇编为机器指令



我正在试验编译器性能。我有一段非常小的代码,只有一些浮点乘法和加法。代码在循环中执行数百万次。我正在尝试用C++,c#,java,perl,python编译代码...然后我在测量执行时间的同时运行结果。

我对 c# 性能非常不满意。我的 c# 代码比等效的 C++ 或 Java 慢约 60%。我敢肯定,我的实验中一定有错误。我想反汇编生成的二进制文件以了解原因。

MSIL 代码有这样的选项吗?是否可以在机器指令级别(x86 指令,而不是 MSIL 指令)检查 c# JIT 编译器的结果?

更新

代码(u、v、g* 为双精度;步长为整数)

stopwatch.Start();
for (int i = 0; i < steps; i++)
{
    double uu = g11 * u + g12 * v;
    v = g21 * u + g22 * v;
    u = uu;
}
stopwatch.Stop();

在 Visual Studio 中调试代码(但在发布模式下编译),在循环中放置一个断点,并在执行在断点处停止时打开"反汇编"窗口(调试 -> Windows -> 反汇编)。

Ngen 你的程序并反汇编结果。

也许你可以先ngen(编译为本机代码)二进制文件,以避免JIT编译。

最新更新