Большая строка в куче больших объектов вызывает проблемы - но в любом случае она должна заканчиваться строкой

Я следую за этим вопросом здесь

У меня проблема в том, что у меня есть некоторые большие объекты, поступающие из MSMQ, в основном строки. Я сузил свои проблемы с памятью до тех объектов, которые создаются в куче больших объектов (LOH) и, следовательно, фрагментируют их (подтвердил это с некоторой помощью профилировщика).

В вопросе, который я разместил выше, я нашел обходные пути, в основном в виде разбиения String на массивы символов, что я и сделал.

Проблема, с которой я столкнулся, заключается в том, что в конце обработки строки (в какой бы то ни было форме) мне нужно отправить эту строку в другую систему, которую я не могу контролировать. Итак, я подумал о следующем решении разместить эту строку в LOH:

  1. Представить ее как массив массивов символов менее 85 КБ каждый (порог объектов, которые должны быть помещены в LOH)
  2. Сжать его на на стороне отправителя (то есть до его получения в системе, о которой мы здесь говорим, которая является получателем) и распаковать его только перед передачей в стороннюю систему.

Что бы я ни делал - так или иначе - строка должна быть полной (без массивов символов или сжатия).

Я застрял здесь? Я думаю, было ли здесь ошибкой использование управляемой среды и должны ли мы перекусить пулей и перейти на среду типа C ++.

Спасибо, Яннис

РЕДАКТИРОВАТЬ: Я сузил проблему до ровно кода, размещенного здесь

Большая строка, которая проходит через помещен в LOH. Я удалил все модули обработки из точки, где я получил сообщение, и тенденция потребления памяти осталась прежней.

Думаю, мне нужно изменить способ передачи этого WorkContext между системами.

7
задан Community 23 May 2017 в 10:34
поделиться