Мое приложение читает множество данных из текстовых файлов, которые попадают в кучу больших объектов, что в конечном итоге вызывает проблему фрагментации. Существуют ли альтернативные дизайнерские подходы, которые могут помочь не донести их до LOH? Я знаю о StringBuilder, но кажется, что чтение из текстового файла по-прежнему создает большие строки в LOH.Как избежать строк, вызывающих фрагментацию в LOH
2
A
ответ
1
Если вы не хотите менять вызовы на ReadAllLines
, то нет возможности избежать выделения LOH, когда строки достаточно велики (не до конца клонируя ретрансляцию .Net github, изменяя стратегию распределения и перекомпилируя ее) , Любое другое решение увидит либо чтение небольших строк из файла, либо чтение файла в виде байтов в ваш собственный буфер, где вы затем будете управлять распределением и компоновкой байтов самостоятельно, скорее всего, увеличьте его, создав свой собственный класс строк (поскольку System.String всегда копирует в свой собственный буфер).
Однако у вас теперь есть выбор с .Net> = 4.5.1: уплотнение LOH. Чтобы выполнить это вручную, выполните следующие действия:
LOH только в 85 000 байт ... Я думаю, вы читаете целые файлы в строки? Вам просто нужно прочитать его в кусках. –
Как вы читаете этот файл? Если это проблема, вам нужно получить доступ к файлу в небольших кусках, а не в том, что-то вроде «ReadAllLines». – vcsjones
Большинство мест, которые я делаю через ReadLine, хотя есть несколько мест, где это делается через ReadAllLines. Выполняя это с помощью ReadLine, мне все равно нужно объединить все эти строки как одно, которое выполняется с помощью StringBuilder – BKS