У меня есть большая библиотека c-кода, которая раньше записывала свои результаты в файл. Я преобразовал его так, чтобы он возвращал данные через массив float * в программу на C ++, например, (чтобы избежать постоянного файлового ввода-вывода):
float* mgrib(...)
Это прекрасно работало в с ++, где я мог "освободить" память. Мне удалось получить данные в C # правильно с помощью:
IntPtr pointer = mgrib(...);
float[] result = new float[ size ];
Marshal.Copy( pointer, result, 0, size );
Marshal.FreeCoTaskMem( pointer );
Это внутри цикла, так как многие поля должны быть извлечены из функции. Если это меньше чем 256 полей, это прекрасно работает. Если это больше, он падает без предупреждения. Если я правильно запустил файл и запустил другой (всего более 256), он завис. Я далеко не эксперт по CS, но 256 кажется больше, чем совпадением.
Я ценю любое понимание. Спасибо.