C ++ / CLI: предварительное выделение памяти для строковых дескрипторов - PullRequest
0 голосов
/ 05 февраля 2012

Я передаю карту строк из нативного класса c ++ в c #, используя c ++ / CLI.Нативный код с использованием stl map.В C ++ / CLI я преобразовываю каждую строку stl в CString и вставляю в словарь ^, используя String ^ str = gcnew String (umngd.c_str ()).Помимо необходимости повторять карту, что мне интересно, если есть встроенный способ сделать это, моя проблема в том, что этот кусок кода очень медленный, вероятно, из-за большого количества дискретных выделений памяти gcnew.Мой вопрос заключается в том, как мне предварительно выделить всю необходимую память, а затем вставить значения в эту предварительно выделенную память.

Спасибо.

1 Ответ

1 голос
/ 05 февраля 2012

gcnew создает экземпляр управляемого типа в куче, собираемой мусором..NET CLR уже предварительно выделяет пространство для кучи и управляет ее размером, и он довольно умен в этом.Если вам нужен миллион управляемых строковых объектов, вам понадобится миллион gcnew.На моем ноутбуке это занимает несколько сотен миллисекунд.Это слишком медленно?

Проверьте свой код.Если на самом деле слишком медленно, возможно, вы можете использовать другой подход.Здесь немного обсуждаются альтернативы здесь .

...