Я пишу оболочку C++/cli вокруг проекта C++, чтобы я мог вызывать его из C#. Сторона C# вызывает метод cli [скажем, Put(String^key, String^value)] миллионы раз, чтобы передать большой набор данных, управляемых ключом/значением, после чего следует еще один вызов [скажем, Commit()], чтобы запросить объект C++ что-то делать с данными. Мне нужно иметь возможность хранить все эти данные в памяти до последнего вызова, поэтому я использую std::vector и пытаюсь преобразовать все управляемые строки в неуправляемые std::string и хранить их в векторе в моем кли код.
Мой вопрос: как лучше всего преобразовать управляемые данные в этом сценарии? Закрепление управляемых данных для сохранения действительных неуправляемых указателей кажется действительно плохой идеей, поскольку данные не используются немедленно (также это не сработает, если закрепление выходит за рамки сразу после вызова функции - это приводит к нарушениям доступа). Другой вариант — выделить «достаточно большой» буфер с помощью malloc и продолжать добавлять в него данные. возвращает) лучший способ преобразовать/скопировать одиночные данные String^? (2) так как я не буду заранее знать общий размер для maloc, как лучше всего увеличить память из исходного malloc? Я был бы признателен за любой указатель на хорошее дизайнерское решение для этого сценария.