Неудивительно, что управление памятью в CLR лучше, чем куча старых и грязных трюков, на которых основан MFC: он по меньшей мере в два раза моложе самого MFC и основан на пуле. Когда мне приходилось работать над аналогичным проектом со строковыми массивами и WinAPI / MFC, я просто использовал std :: basic_string, созданный с помощью WinCHI TCHAR, и мой собственный распределитель, основанный на Loki :: SmallObjAllocator. В этом случае вы также можете взглянуть на boost :: pool (если вы хотите, чтобы он имел «std feel» или вам приходилось использовать версию компилятора VC ++ старше 7.1).

ошлой неделе я написал несколько строк кода на C # для запуска большого текстового файла (300 000 строк) в словарь. Написание заняло десять минут, и оно было выполнено менее чем за секунду.

Теперь я конвертирую этот кусок кода в C ++ (потому что он мне нужен в старом COM-объекте C ++). Я провел два дня на этом далеко. :-( Хотя разница в производительности сама по себе шокирует, мне нужно несколько советов по поводу производительности.

На загрузку уходит семь секунд, и даже хуже: на то, чтобы потом освободить все CStringW, требуется ровно столько же времени. Это недопустимо, и я должен найти способ повысить производительность.

Есть ли шанс, что я смогу выделить столько строк, не увидев этого ужасного снижения производительности?

Сейчас я предполагаю, что мне придется собрать весь текст в большой массив, а затем позволить моей хэш-таблице указывать на начало каждой строки в этом массиве и отбрасывать содержимое CStringW.

Но перед этим, какой-нибудь совет от вас C ++ экспертов?

РЕДАКТИРОВАТЬ: Мой ответ сам себе дан ниже. Я понял, что это самый быстрый маршрут для меня, а также шаг в том, чтоI рассмотреть возможностьправильное направление к более управляемому коду.

Ответы на вопрос(10)

Ваш ответ на вопрос