Я пишу программное обеспечение в С#, которое нужно вызвать много раз, а по многим потокам - функцию в неуправляемой dll С++.
У меня есть файл С++:
// "variables" which consist in some simple variables (int, double)
// and in some complex variables (structs containing arrays of structs)
extern "C"
{
__declspec(dllexport) int function1()
{
// some work depending on random and on the "variables"
}
}
и класс С#, подобный этому
public class class1
{
// "variables" <--- the "same" as the C++ file ones
// Dll import <--- ok
public void method1()
{
int [] result;
for(int i=0; i<many_times; i++)
{
result = new int[number_of_parallel_tasks];
Parallel.For(0, number_of_parallel_tasks, delegate(int j)
{
// I would like to do result[j] = function1()
});
// choose best result
// then update "variables"
}
}
}
Я написал "Я хотел бы сделать...", потому что в каждом раунде функция С++ нуждается в обновлении "переменных".
Мой вопрос:
Возможно ли обмен памятью между С++ и С#, чтобы избежать передачи ссылки каждый раз? Это просто пустая трата времени?
Я читал о файлах с отображением памяти. Могли они мне помочь? Однако вы знаете более подходящие решения?
Большое вам спасибо.