Вопрос, Dephi, ужимание памяти процессу
|
|
antbert | Дата: Четверг, 18.10.2012, 19:04 | Сообщение # 1 |
Участник
Зарегистрирован: 19.09.2012
Группа: Пользователи
Сообщений: 60
Статус: Offline
| Добрый день.
Делаю штуку одну, так сказать ради саморазвития, столкнулся с некими трудностями:
Каким образом ограничивать потреблению приложением оперативки.
Если где-то есть реализации кода работы с процессами - прошу поделиться.
Спасибо.
Сообщение отредактировал antbert - Пятница, 19.10.2012, 08:48 |
|
| |
antbert | Дата: Воскресенье, 21.10.2012, 11:12 | Сообщение # 2 |
Участник
Зарегистрирован: 19.09.2012
Группа: Пользователи
Сообщений: 60
Статус: Offline
| ап
|
|
| |
Don_Diego | Дата: Воскресенье, 21.10.2012, 20:02 | Сообщение # 3 |
Продвинутый
Зарегистрирован: 16.04.2012
Группа: Пользователи
Сообщений: 253
Статус: Offline
| antbert, помоему это нереально. Ибо тогда не было бы смысла переходить с 128 Мб оперативной памяти. Насколько мне известно - именно в памяти программа полностью распаковывается, поэтому зачастую занимает больше оперативной памяти, чем собственный размер.
|
|
| |
antbert | Дата: Воскресенье, 21.10.2012, 23:33 | Сообщение # 4 |
Участник
Зарегистрирован: 19.09.2012
Группа: Пользователи
Сообщений: 60
Статус: Offline
|
В диспетчере задач, думаю, каждый знаком с приоритетами к процессам. Из этого следует то, что моя задача вполне осуществима. Если приложению не хватит оперативной памяти для обычной выгрузки - оно не запустится. Тут речь о другом.
Сообщение отредактировал antbert - Понедельник, 22.10.2012, 08:00 |
|
| |
XSPY | Дата: Понедельник, 22.10.2012, 10:23 | Сообщение # 5 |
Продвинутый
Зарегистрирован: 28.01.2010
Группа: Пользователи
Сообщений: 263
Статус: Offline
| antbert, почитайте про форматы файлов,структуру памяти и методику проектирования приложений.Только после этого поищите по ключевым словам: "приоритет приложения","execute in memory" и "write memory"-тогда и поймете ответ на свой вопрос. (это для полного понимания сути)
|
|
| |
antbert | Дата: Понедельник, 22.10.2012, 17:32 | Сообщение # 6 |
Участник
Зарегистрирован: 19.09.2012
Группа: Пользователи
Сообщений: 60
Статус: Offline
| Quote (XSPY) antbert, почитайте про форматы файлов,структуру памяти и методику проектирования приложений.Только после этого поищите по ключевым словам: "приоритет приложения","execute in memory" и "write memory"-тогда и поймете ответ на свой вопрос. (это для полного понимания сути)
У меня нет времени на всю эту ересь. В данном случае мне хватит для понятия кода остаточных знаний от прочтения общей литературы на эту тематику. Я знаю одно - win способна урезать/увеличивать ресурсы на процесс(приложение). Для пользователя все это реализовано в виде процессов. Мне требуется более широкий контроль.
Code Option Explicit Private Declare Function SetPriorityClass _ Lib "kernel32" (ByVal hProcess As Long, _ ByVal dwPriorityClass As Long) As Long Private Const REALTIME_PRIORITY_CLASS = &H100 Private Const HIGH_PRIORITY_CLASS = &H80 Private Const NORMAL_PRIORITY_CLASS = &H20 Private Const IDLE_PRIORITY_CLASS = &H40 Private Declare Function OpenProcess _ Lib "kernel32" (ByVal dwDesiredAccess As Long, _ ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Private Const PROCESS_QUERY_INFORMATION = &H400 Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
Private Sub SetPriority(Priority As Long) Dim ProcId As Long 'переменная для id процесса Dim ProcHandle As Long 'переменная для handle процесса ProcId = GetCurrentProcessId 'получим id ProcHandle = OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcId) 'получили Handle Call SetPriorityClass(ProcHandle, Priority) ' ставим приоритет End Sub
Private Sub Form_Load() 'ставим приоритет SetPriority HIGH_PRIORITY_CLASS End Sub
Сообщение отредактировал antbert - Понедельник, 22.10.2012, 17:34 |
|
| |
xXxSh@dowxXx | Дата: Понедельник, 22.10.2012, 19:33 | Сообщение # 7 |
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
| antbert ты хочешь всего навсего изменять приоритет для процесса, я правильно тебя понял, или ты хочешь добиться чего то большего?
|
|
| |
antbert | Дата: Понедельник, 22.10.2012, 19:44 | Сообщение # 8 |
Участник
Зарегистрирован: 19.09.2012
Группа: Пользователи
Сообщений: 60
Статус: Offline
| Quote (xXxSh@dowxXx) antbert ты хочешь всего навсего изменять приоритет для процесса, я правильно тебя понял, или ты хочешь добиться чего то большего? Неужели вот эти слова не дают ответа на мой вопрос - "Каким образом ограничивать потреблению приложением оперативки."? Код, который мог бы менять приоритет я выше привел.
|
|
| |
Don_Diego | Дата: Понедельник, 22.10.2012, 19:48 | Сообщение # 9 |
Продвинутый
Зарегистрирован: 16.04.2012
Группа: Пользователи
Сообщений: 253
Статус: Offline
| Может я чего-то не пойму, но какая связь между приоритетом процесса и потребляемой им памятью? Или ты хочешь чтобы в диспетчере задач показывалось всегда фиксированное значение занимаемой памяти? Но на самом деле занимать будет больше?
|
|
| |
antbert | Дата: Понедельник, 22.10.2012, 20:36 | Сообщение # 10 |
Участник
Зарегистрирован: 19.09.2012
Группа: Пользователи
Сообщений: 60
Статус: Offline
| Quote (Don_Diego) Может я чего-то не пойму, но какая связь между приоритетом процесса и потребляемой им памятью? Или ты хочешь чтобы в диспетчере задач показывалось всегда фиксированное значение занимаемой памяти? Но на самом деле занимать будет больше?
Хм, в этом случае попытаюсь объяснить.
Windows поддерживает многозадачность. То есть допустимо выполнение одновременно нескольких задач. Различие между обычными процессами(запущенными приложениями) заключается в приоритете. То есть распределение ресурсов на эти процессы Windows осуществляет, используя приоритеты/потребности программы. Суть моего вопроса в том, что я сам хочу распределять эти ресурсы для некоторых процессов(приложений).
|
|
| |
Don_Diego | Дата: Понедельник, 22.10.2012, 21:02 | Сообщение # 11 |
Продвинутый
Зарегистрирован: 16.04.2012
Группа: Пользователи
Сообщений: 253
Статус: Offline
| Quote (antbert) Суть моего вопроса в том, что я сам хочу распределять эти ресурсы для некоторых процессов(приложений). Хм... Ну в таком случае тебе уже очень правильно дал ответ XSPY. От себя только немного добавлю - это все встретишь при изучении уже азов ассемблера.
|
|
| |
antbert | Дата: Понедельник, 22.10.2012, 22:19 | Сообщение # 12 |
Участник
Зарегистрирован: 19.09.2012
Группа: Пользователи
Сообщений: 60
Статус: Offline
| Quote (Don_Diego) Хм... Ну в таком случае тебе уже очень правильно дал ответ XSPY. От себя только немного добавлю - это все встретишь при изучении уже азов ассемблера. Не понимаю здешних людей. Попросил дать готовые реализации, если видел кто, а меня пытаются учить теории. Во всяком случае спасибо за потраченное время.
Сообщение отредактировал antbert - Понедельник, 22.10.2012, 22:19 |
|
| |
Don_Diego | Дата: Вторник, 23.10.2012, 00:19 | Сообщение # 13 |
Продвинутый
Зарегистрирован: 16.04.2012
Группа: Пользователи
Сообщений: 253
Статус: Offline
| http://rutracker.org/forum/viewtopic.php?t=740288 Assembler для DOS, Windows и UNIX 3-е издание
Главы: 1.2.7, 2.1-2.2.8, 4.9 и т.д.
Там и конкретные примеры. Не поймите неправильно что посылаю на какую-то книжку (хоть она и заслуживает большого уважения), просто перепечатывать сюда от туда коды смысла большого нету. Если действительно Вам интересна эта тема - начинайте изучать. Для понимания того что Вы хотите - достаточно просмотреть первую главу. Если подойдет - можете дальше осваивать, лишним не будет.
|
|
| |
XSPY | Дата: Вторник, 23.10.2012, 10:47 | Сообщение # 14 |
Продвинутый
Зарегистрирован: 28.01.2010
Группа: Пользователи
Сообщений: 263
Статус: Offline
| antbert,эта ересь не такая уж и ересь) без неё не было бы практических результатов... А касательно кода-поищи сорсы Спермского и часть слитых сорцов Винды NT (NT2K имя архива)-там вроде были пару таких строк...
|
|
| |
antbert | Дата: Вторник, 23.10.2012, 23:26 | Сообщение # 15 |
Участник
Зарегистрирован: 19.09.2012
Группа: Пользователи
Сообщений: 60
Статус: Offline
| Благодарю, будет время - начну изучать.
|
|
| |
C@T | Дата: Пятница, 26.10.2012, 19:35 | Сообщение # 16 |
Авторитетный
Зарегистрирован: 06.03.2010
Группа: Модераторы
Сообщений: 265
Статус: Offline
| SetProcessWorkingSetSize попробуй эту апишку
|
|
| |