私は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