После тяжелой операции (50 000 000 итераций) свободное место на диске значительно сократилось - PullRequest
2 голосов
/ 20 ноября 2010

Я разработал консольное приложение в стиле бенчмарка (C # 4.0).Хорошо работал с 50000 или 1000000 итераций.Затем я увеличил количество итераций до 50 000 000.Но это заняло слишком много времени, и я заставил его бросить курить.Приложение вышло нормально, но у меня на главном диске (C :) осталось всего 3,8 ГБ.До тестирования свободного места было 14 ГБ.Там уже 10 гб съел !!!Пожалуйста, кто-нибудь может объяснить, почему это произошло?

Привет всем,

Я обнаружил этот файл * .vsp в каталоге моего проекта (9 ГБ !!!).Да, это может показаться глупым, потому что я искал все системные скрытые папки на моем главном диске, но никогда не думал, что этот гигантский файл может быть в папке моего проекта.После 50 000 000 итераций я почувствовал, что моя система стала работать медленнее, и я запустил Performance Wizard в VS2010.Но количество итераций было очень мало, поэтому я не думал, что мастер производительности может создать такой гигантский файл!Спасибо всем!

Ответы [ 4 ]

4 голосов
/ 20 ноября 2010

Без дополнительной информации (например, о том, что на самом деле делает тест), я предполагаю, что программа утечка памяти, как сито, и Windows компенсирует, неуклонно увеличивая размер файла подкачки / подкачки, поглощая пространство на жестком диске в процессе. , Вы можете взглянуть на свой C:\pagefile.sys и посмотреть, насколько он велик.

1 голос
/ 20 ноября 2010

Полагаю, это связано с тем, что страница подкачки виртуальной памяти увеличилась, потому что GC не выполнялся в цикле итерации, а использование памяти увеличилось, а затем в конечном итоге память была заменена на файл подкачки.См. http://support.microsoft.com/kb/828988 для получения дополнительной информации о GC в консольном приложении.Я никогда не пробовал этого, но думаю, что использование атрибута MTAThread поможет.

1 голос
/ 20 ноября 2010

По какой причине - это может зависеть от ваших строковых операций (например, выполнение конкатенации или использование StringBuilder).

Что касается места, как указано ранее, вероятно, это будет ваш файл подкачки.

Если это ваш файл подкачки, способ освободить пространство - вручную отрегулировать размер файла подкачки до гораздо меньшего, чем текущее значение через Windows, а затем перезагрузиться.

Клавиша Windows + Пауза / Прерывание, нажмите Дополнительные параметры системы, в разделе Производительность нажмите Параметры ... В появившемся окне «Параметры производительности» в разделе «Виртуальная память» нажмите «Изменить ...», чтобы Windows автоматически прекратила управление размером файла подкачки. Нажмите на диск C: и установите его на нестандартный размер, значительно меньший, чем сейчас (попробуйте, например, 1024 МБ).

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

Возможно, вы захотите вернуть размер файла подкачки на автоматическое управление Windows после его завершения.

Если вам нужна помощь в избежании кода, вызывающего ту же проблему, вам может потребоваться предоставить некоторые фрагменты кода.

0 голосов
/ 20 ноября 2010

Временные файлы пространства подкачки (виртуальная память).

Создает ли ваше приложение файлы?Сколько памяти он использует (диспетчер задач)?

...