![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
Собственно вопрос: Как задать максимальный размер выделяемой под приложение памяти?
Помню, че-то такое было, но даже приблизительно не помню че. Помогите, плиз -------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
А разве дотнетовское приложение не кушает всю свободную память ? Вроде, для Win32-приложений то же самое.
-------------------- ![]() |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
mr.DUDA, вот и я того же мнения.
В классе Сборщика мусора нет свойства отвечающего за предел памяти Если бы было, то было бы именно там |
|||
|
||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
Не, неправильный вопрос. Не максимальный, а первоначальный. Насколько я знаю, винда при старте процесса выделяет для него сколько-то памяти с резервом. Если для процесса этой памяти недостаточно, выделяется дополнительно еще сколько-то памяти с резервом. И так далее. Так вот эти моменты выделения дополнительной памяти довольно длительные Так вот как задать размер первоначально выделяемой памяти? З.Ы. Где-то это точно было. З.З.Ы. Возможно даже и не в .NET. -------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| kobra |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 730 Регистрация: 15.6.2005 Где: Грузия, Тбилиси Репутация: 1 Всего: 9 |
SQL SERVER умеет такое, значит возможно. но как? вот это вопрос.
|
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 24 Всего: 93 |
А это ответ -- VirtualAlloc Только это из WinAPI и в .NET от него никакой пользы не будет. Я вообще не очень понимаю, как автоматическая сборка мусора может сочетаться с ручным резервированием памяти? Это сообщение отредактировал(а) Дрон - 5.10.2006, 13:03 -------------------- Да. Именно так. |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Это как для класса List<T> есть понятие capacity = начальная емкость. Изначально она вроде 4, а потом возрастает в геометрической прогрессии (знаменатель 2) по мере надобности. Так вот если ты 100% уверен, что у тебя будет 10-20-100 элементов, то можно ставить емкость в это значение (или чуть больше). Это сэкономит часть ресурсов при перевыделении памяти Это сообщение отредактировал(а) ivashkanet - 5.10.2006, 13:18 |
|||
|
||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
Вот именно для этих целей мне и нужно ограничивать память. Потому что получается нифика она не автоматическая. Как я понял, почитав MSDN, сборщик мусора начинает собирать мусор, когда не хватает памяти для создания нового объекта. А в силу
получается, что даже очень маленькое, но долго выполняющееся приложение скушает всю память. Нехорошо. -------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Я не понял, что тебе надо? Ограничить сверху? Или задать начальную "емкость" памяти? P.S. System.GC.Collect() тебе в руки |
|||
|
||||
| blast99 |
|
|||
![]() сисадмин ![]() Профиль Группа: Участник Сообщений: 134 Регистрация: 3.5.2005 Где: Россия, г. Ставро поль Репутация: нет Всего: 3 |
ivashkanet, насколько я понял - ему бы хотелось ограничить память для насильственного вызова сборщика мусора, чтобы он объекты подчистил. Вроде так...
--------------------
Зачастую, наши возможности ограничены лишь нашими желаниями. И ничто так не ограничивает желания, как заниженная оценка своих возможностей. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Небольшое расследование показало наличие метода GC.AddMemoryPressure, но он действует только для unmanaged-памяти. Можно попробовать создать свой поток, который будет с периодичностью N.N секунд проверять размер выделенной памяти и по превышению - вызывать GC.Collect
-------------------- ![]() |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
|
|||
|
||||
| Naum |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
Честно говоря, и то и другое. С максимальной памятью уже все решено. Я просто хотел на практике убедиться, что и
если ручками не управлять этим самым GC. А насчет первоначальной памяти было несколько советов.
Поискал в MSDN. capacity - есть у многих классов. Но почему то нет у Application. Буду пробовать. Спасибо за помощь. -------------------- У нас всего два праздника Новый год и ТЯПница. |
||||
|
|||||
| -ser- |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 1.2.2005 Репутация: 5 Всего: 13 |
не понимаю почему это должно быть длительным. может держит что-то другое? вообще удивляет, почему все так активно и серьезно обсуждают эту тему. я бы не стал этой ерундой заниматься. откуда ты знаешь, сколько тебе нужно памяти пусть и с запасом? дошли уже до ручного управления GC! если все такие умные, что ж вы сам .net раньше не написали. -------------------- "Тонкая, однако, работа." |
|||
|
||||
| Naum |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
Простите, простите я ничего плохого про разработчиков .NET Framework SDK не говорил, и ничего не говорил про свои и их умственные способности. А про ручное управление GC это не так уж страшно, а для unmanaged-ресурсов просто необходимо показать этому GC, как их собирать.
http://msdn.microsoft.com/library/rus/defa...ymanagement.asp -------------------- У нас всего два праздника Новый год и ТЯПница. |
||||
|
|||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Naum, ты не путай "ручное управление GC" с необходимостью очищать unmanaged ресуры. Это совершенно разные вещи. Первое это влезание в логику работы механизма очистки, а второе это "объяснение" сборщику мусора как правильно работать с вещами, с которыми работать он изначально не умеет |
|||
|
||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
Хорошо, это я понял. Но зачем тогда класс GC, если управлять сборщиком ручками это плохо?
-------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Чтобы была возможность (в исключительных случаях) произвести сборку вручную. Например инициализация приложения требует очень больших ресурсов, но проводится она всего лишь раз в день (например). После инициализации эти ресурсы не нужны. Можно, конечно, оставить эти ресурсы до сборки мусора, но ты не хочешь, чтобы твой "трэй монитор" занимал 200М, не нужной ему сейчас, памяти. Вот ты и очищаешь ее. Т.е. главное правило --- не злоупотребляй |
|||
|
||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
А этот случай
можно считать исключительным? Добавлено @ 10:42 Имеется ввиду не сервис, а Windows Forms или консольное приложение. -------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
При отсутствии утечек памяти, приложение не будет есть больше определённого предела. -------------------- ![]() |
|||
|
||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
Вот именно это я и хотел узнать - больше определенного чем или кем предела оно не будет есть? -------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Зависит от того, сколько объектов создаёшь и как часто. -------------------- ![]() |
|||
|
||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
И еще интересно, почему не будет есть? Получаица, сборщик мусора собирает мусор не только в те моменты, когда для новых объектов уже не хватает памяти?
-------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
А я нашел кое-что интересное от ИвашкиНет..
Хоть ответ и не в этом топике, все равно ИвашкиНет +1. -------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Naum, так то ж не мне
Я просто к тому посту успел прочитать статью по ссылку Void-а. Вот и ответил. P.S. Ссылка на статью назодится в том же топике |
|||
|
||||
| Naum |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
Вспомнил. ИМХО, это не то, что мне надо, но просто так, если кому инетересно.
-------------------- У нас всего два праздника Новый год и ТЯПница. |
||||
|
|||||
| Gazon |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 9.1.2005 Репутация: 3 Всего: 8 |
Naum,
Для управления рабочем множеством используется API функция SetProcessWorkingSetSize(находится в библиотеке kernel32), которая принимает хэндл процесса, минимальный и максимальный рамер рабочего множества. Если же в качестве минимального и максимального размера передать -1, то рабочее множетсво минимизиируется до фактического размера выделенной памяти. Не думаю, что стоит вызывать эту функцию для увеличения рабочего множества т.к. среда это делает сама с большой охотой и в основном к этой функции прибегают для уменьшения рабочего множетсва. Думаю, что увеличение размера рабочего множетсва не отнимает очень много ресурсов, иначе рабочее множетсво не минимизировалось бы каждый раз средой, когда сворачиваешь форму(сверните форму и в диспетчере задач увидете как минимизируется память). --------------------
Чем больше узнаешь, тем больше не знаешь, но до истины всегда можно добраться. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [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. |