Когда я изменил параметры сборки DLL с собственной на / CLR, чтобы я мог отлаживать через границу c # / c ++, моя производительность сократилась вдвое.
Я разработал собственную C ++ DLL с конкретными высокопроизводительными алгоритмами для решения своих вычислительных задач. Эту библиотеку DLL мне нужно было подключить к приложению C #, разработанному деловым партнером, и оно используется для замены алгоритма с более низкой производительностью. Все шло отлично, я подключил свою DLL, используя статические вызовы-обертки, алгоритм DLL работал отлично, показав увеличение производительности в 2 раза по сравнению с оригинальным алгоритмом, но не смог отладить через границу.
Затем я переключил настройки сборки DLL c ++ с собственной на / CLR, чтобы иметь возможность отлаживать через границу DLL c # / c ++, и моя производительность упала вдвое.
Не могу понять, почему это так.
c ++ DLL сторона:
extern "C"
{
__declspec(dllexport) void* NewCalc()
{
return (void*)new CalcCL;
}
__declspec(dllexport) double Calc(void* sCalc, int *Buf, int Cnt)
{
return ((CalcCl*)sCalc)->Calc(Buf, Cnt);
}
}
c # сторона:
[DllImport("CalcDLL.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int NewCalc();
[DllImport("CalcDLL.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern double Calc(int sCalc, int[] Buf, int Cnt);
...
int sCalc = NewCalc();
...
double res;
int[] MyBuf = new int[1000];
// <Code that fills MyBuf with target data for algorithm>
res = Calc(sCalc, MyBuf, 1000);