我有两个库,第一个是在vb.net中完成的原始文件,第二个是在c#中.
做同样的事情.
vb.net比c#快10%左右,非常奇怪
所以我发现似乎是减速的原因,通过查看IL两者的代码是(我会说接近99%的il代码是相同的);
在c#中所有方法调用都有,hidebysig但在vb.net中没有
这一件事可能是性能问题吗?
在c#中,您必须在使用之前初始化局部变量
这不会在c#中工作
void test()
{
int a;
a += 1;
}
Run Code Online (Sandbox Code Playgroud)
这将
void test()
{
int a = 0;
a += 1;
}
Run Code Online (Sandbox Code Playgroud)
而这工作在vb.net
Sub test()
Dim a As Integer
a += 1
End Sub
Run Code Online (Sandbox Code Playgroud)
在c#中导致2个更多的IL线,我很确定,这会导致性能问题
在vb.net中,似乎我无法il使用代码call,它总是callvirt在c#总是使用时使用call
这一件事可能是性能问题吗?
.maxstack在c#中有时候更大
这一件事可能是性能问题吗?
最后,我试图了解如何恢复10%的速度损失.到目前为止,我一无所知
如果你想看看它是,你可以自己反编译,我用ilspy;
ZIP文件,编译版本
ChessEngine.dll
ChessEngineSharp.dll
ConsoleApplication1.exe
hidebysig 只是控制重写方法中的名称查找的工作方式.
在c#中导致2个更多的IL线,我很确定,这会导致性能问题
不,它没有.应该生成相同的IL - 或等效代码.在VB中,初始化是强制性的,只是如果您没有明确地执行它,编译器会为您隐式执行它.
在vb.net中,似乎我无法使用il代码来使用call,它总是使用callvirt而c#总是使用call
我很确定你的方法错了.C#将始终使用callvirt虚方法,VB支持call使用MyClass.Method()语法.
事实上,如果您的基准测试显示VB快10%,那么我怀疑您的基准测试中存在错误,仅此而已.
| 归档时间: |
|
| 查看次数: |
1278 次 |
| 最近记录: |