Обработка больших строк, является эта большая фрагментация кучи объекта?

У меня есть приложение .NET 3.5

  • Функция работает в миллион раз
  • Операции поиска и замены и регуляции REGEX в 1 МБ + строки (разные размеры строки)

Когда я профиля приложения, я могу подтвердить, что эти строки хранятся в LOH, но и они также восстанавливаются GC позже, так что в данный момент времени Их в Лохе (работает 10 поток).

Мое понимание в том, что эти большие строки расположены в Лохе, затем утеряют GC, но и все же как-то из-за их расположенных нахождений ( и находиться в LOH, поэтому не уплотняется ) Это вызывает фрагментацию. Это происходит, несмотря на то, что в операции нет утечки памяти.

Это не вызывает проблем в ~ 100 тысяч раз, однако, когда она достигает 1 м +, он выдает из исключений памяти.

Я использую Profiler Memory Memory, и это результат, который я получил в ранних казнях:

.NET Using 70MB of 210MB total private bytes allocated in to the application
Number of Fragments: 59
Number of Large Fragments : 48 (99.6% of free memory)
Largest Fragment: 9MB
Free Space: 52% of total memory  (37MB)
Unmanaged Memory: 66% of total private memory (160MB)
  1. Как вы думаете, мой диагноз правильный на основе данных в руке?
  2. Если так, как я могу решить Это проблема фрагментации LOH? Я должен обрабатывать эти строки, и они большие строки. Должен ли я найти способ разделить их и обрабатывать так? В таком случае запущены Regex и т. Д. В разделение строк будут действительно сложными.
7
задан dr. evil 11 September 2011 в 02:31
поделиться