私は2つのライブラリを持っています。最初のライブラリはvb.netで行われたオリジナルで、2番目のライブラリはc#です。
まったく同じことをします。
vb.netはc#よりも約10%高速ですが、これは非常に奇妙です
したがって、両方のコードを見ると、速度低下の原因と思われることがわかりましたIL
(コードの99%近くが同じであると言えil
ます)。
C#では、すべてのメソッド呼び出しにはあります
hidebysig
が、vb.netにはありませんこれはパフォーマンスの問題になる可能性がある1つのことですか?
C#では、ローカル変数を使用する前に初期化する必要があります
これはC#では機能しません
void test() { int a; a += 1; }
この意志
void test() { int a = 0; a += 1; }
これはvb.netで動作します
Sub test() Dim a As Integer a += 1 End Sub
これは、C#でさらに2つのILラインを引き起こし、パフォーマンスの問題を引き起こすと確信しています。
vb.netでは、
il
使用するコードを取得できないようですcall
。常に使用しますcallvirt
が、c#では常に使用します。call
これはパフォーマンスの問題になる可能性がある1つのことですか?
.maxstackはc#で時々大きくなります
これはパフォーマンスの問題になる可能性がある1つのことですか?
結局、私はその10%の速度低下を取り戻す方法を理解しようとしています。これまでのところ私は無知です
ここを見てみたい場合は、自分で逆コンパイルできます。私はilspyを使用しました。
ZIPファイル、コンパイル済みバージョン
ChessEngine.dll
ChessEngineSharp.dll
ConsoleApplication1.exe