.NET кучи больших объектов и взаимодействие JSON - PullRequest
1 голос
/ 20 февраля 2009

У меня есть приложение asp.net, которое сериализует данные для клиента, используя JSON. Как только нагрузка достигает определенного уровня, приложение проводит в GC неоправданное время, и после некоторого времени, проведенного с WinDbg / SOS и связанными с ним инструментами, оказывается, что происходит существенная доля фрагментации LOH, поскольку размер генерируемого JSON часто достаточно велик, чтобы превышать границу LOH 86 КБ.

мой вопрос 2 раза 1) Кто-нибудь запускал этот конкретный сценарий воздействия на поколение JSON и вызывал фрагментацию LOH и 2) Есть ли у кого-нибудь предложения о том, как справиться с этим.

1 Ответ

1 голос
/ 20 февраля 2009

Если вы генерируете большое количество строк> 85 КБ, это все равно проблематично с точки зрения производительности.

Вам необходимо полностью сгенерировать данные перед их отправкой клиенту? Если ваша библиотека JSON поддерживает запись данных в Stream / TextWriter и API-интерфейс ответа клиента поддерживает это, я просто связал бы одну цепочку с другой стороной, решая проблему.

Если вы не можете сделать это, вам, возможно, придется прибегнуть к пулу объектов, который не будет работать со строками, и вам придется прибегнуть к char [] или byte [] (MemoryStream сделает это легко) и использовать повторно. резервный массив. Вероятно, одного на поток достаточно. Возможно, вы захотите разобраться со случаями, когда из-за необычного массивного ответа базовый массив всплывает, а затем сохраняется.

...