Я слежу за этим вопросом здесь
Проблема в том, что у меня есть несколько больших объектов, поступающих из MSMQ, в основном из строк. Я сузил свои проблемы с памятью до того, что эти объекты были созданы в куче больших объектов (LOH) и, следовательно, фрагментированы (подтверждено с помощью профилировщика).
В вопросе, который я разместил выше, я нашел несколько обходных путей, главным образом, в форме разбиения строки на массивы символов, что я и сделал.
Проблема, с которой я сталкиваюсь, заключается в том, что в конце обработки строки (в любой форме) мне нужно отправить эту строку в другую систему, которую я не могу контролировать. Поэтому я думал о следующем решении, чтобы поместить эту строку в LOH:
- Представляет его как массив массивов символов менее 85 КБ каждый (порог объектов, которые должны быть помещены в LOH)
- Сожмите его на стороне отправителя (т. Е. Перед тем, как получить его в системе, о которой мы здесь говорим, которая является получателем), и распакуйте его только перед передачей в стороннюю систему.
Что бы я ни делал - так или иначе - строка должна быть завершена (без массивов или сжатых).
Я застрял здесь? Я думаю, если использование управляемой среды было ошибкой, и нужно ли кусать пулю и переходить на среду C ++.
Спасибо,
Яннис
РЕДАКТИРОВАТЬ: Я сузил проблему до точно код размещен здесь
Большая проходящая строка помещается в LOH. Я удалил каждый модуль обработки с того места, где я получил сообщение, и тренд потребления памяти остается прежним.
Так что я думаю, мне нужно изменить способ передачи этого WorkContext между системами.