![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
vbprogr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 1.7.2011 Репутация: нет Всего: нет |
Добрый день!
Сегодня столкнулся с непонятным) В общем дела обстоят так: до сериализации BinaryFormatter имеем использование 30 мб памяти (в TaskMan). Данные сохраняются на диск (файл весит 9 мб). При следующем запуске прога выполняет десериализацию, после этого в памяти она весит 50 мб и стремительно растёт во время работы (что не происходит при работе с "оригинальными" объектам). Если попробовать выполнить сериализацию через несколько минут такой "работы", получим 70... 80... 120 мб... я не дождался, но гораздо больше, чем исходные 9 мб. Во время работы создаются много новых объектов, которые заменяют собой старые (т.е. есть List<GameObject> из 9001-го элемента и каждые несколько минут он полностью обновляется новыми объектами). Напрашивается мысль, что сборщик мусора не хочет "очищать объекты", которые появились после десериализации, а не "естественным" путём. При этом на эти объекты нет ссылок... наверное... иначе проблема с "разбуханием" в памяти была бы и до сериализации?... Возможно, Вы уже сталкивались с подобной проблемой. Что-то похожее обсуждается здесь - http://www.rsdn.ru/forum/dotnet/3115924.flat.aspx Подскажите, в чем моя ошибка? -- Заранее спасибо! |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 22 Всего: 118 |
надо взять memoryprofiler какой-нибудь. То что показывает TaskMan это лажа, вы даже не указали какую именно память он кушает. Кроме того, надо посмотреть счетчики производительности .net - что в них?
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
vbprogr |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 1.7.2011 Репутация: нет Всего: нет |
Частично решил проблему - нужно было очищать таблицы респавна объектов перед сериализацией)...
Т.е. разбухания в памяти во время работы больше нет, но, все-таки, любой тяжелый объект после десериализации занимает (по показаниям TaskMan'a) больше памяти, чем до неё. После оптимизации (исправил свою ошибку с респавном): до - 50-60 мб, после - 90 мб. Возможно, когда объекты создаются стандартным способом, они как-то дополнительно упаковываются или частично попадают в файл подкачки... Почему такое не происходит при десериализации? Можно ли вручную запустить такую "упаковку"?
Столбец "Память - использование", т.е. физическая память.
В основном больше всего % дает CLR (операции с коллекциями). Это если во время работы проги, а если при запуске - там идет десериализация несколько секунд.
Попробую SciTech .NET Memory Profiler, посмотрим, что он пишет... |
||||||
|
|||||||
vbprogr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 1.7.2011 Репутация: нет Всего: нет |
М-да... поставил профайлер, но он не заработал без Debugging Tools, за то глюки с памятью непонятным образом исчезли)
|
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |