多量のバイナリ操作が必要なC#コードがあるので、C#メソッドの1つを置き換えるアンマネージドC++メソッドを書きました。私のショックでは、10倍は遅かったですか?私はプロファイルを実行し、メソッド自体ではなく、外部メソッドを呼び出すオーバーヘッドに起因することを発見しました。C#からの呼び出しのためのアンマネージドC++コードのマネージC++への翻訳
私は管理されたC++でメソッドを記述すると、呼び出しのオーバーヘッドが緩和されますが、C++の速度はまだ変わらないと思いました。まず、この仮定は有効ですか?ここで
は私のアンマネージドC++コードです:ここでは
#include "stdafx.h";
unsigned __int32 _stdcall LSB_i32(unsigned __int32 x)
{
DWORD result;
_BitScanForward(&result, x);
return (unsigned __int32)result;
}
は、私のC#のコードです:
public static partial class Binary
{
[DllImport(@"CPP.dll")]
public static extern int LSB_i32(int value);
}
私はここで何も悪いことをやっていますか?
上記をマネージC++に変換するにはどうすればよいですか?私はこれを閲覧しましたが、管理されたC++には慣れていないので、私は遠くには行きませんでした。
残念ながら、私はループ内のコードを配置することはできません。私がやっていることのC++コードは、複雑なC#バイナリ操作よりもはるかに高速でなければならない、そのコアの単一のASM関数(bsr)でなければなりません。他に何もないなら、私は試してみたい。 – IamIC
@IanC、この場合、完全に管理されたコードのままにしておきます。はるかに高速に実行されます。 –
あなたは完全に管理されたC#コードを意味しますか?確かにそれが管理されている場合、私は管理されたC + +を書くことができ、それから利益を得ることができるはずですか? – IamIC