Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ShellExecute


ANTPro ©   (2006-07-12 00:27:00) 

Пишу прогу (панель с кнопками) столкнулся тут с проблемой: при запуске программ с помощью
ShellExecute(0, nil, PChar(Путь до файла),nil, nil,SW_SHOWNORMAL);
моя прога увеличивает использование памяти на 2-3mb. При закрытии запущеного файла использование памяти моей прогой не уменьшается.
Может я что-то не так делаю.


ANTPro   (2006-08-10 18:57:00) [1]

Все разобрался вот решение:
SetProcessWorkingSetSize(GetCurrentProcess, dword(-1), dword(-1));


Anatoly Podgoretsky   (2006-08-09 20:01:00) [2]

Desdechado ©   (08.08.06 16:01) [13]
Но количество опыта с запасом все перекрывает


ANTPro   (2006-08-09 19:43:00) [3]

Вот выложил могет поможет (надо запустить кинуть файлы и закрыть потом снова открыть появиться анимация)
http://www.antprog.narod.ru/panel.rar[27,8 КБ]


ANTPro   (2006-08-08 16:29:00) [4]

Desdechado ©   (08.08.06 16:01) [13]
Забывают обычно программисты

В данном случае я тут непричем, мне освобождать нечего

Desdechado ©   (08.08.06 16:01) [13]
Да и DLL Могут друг дружку с радостью вызывать, тебя не спрашивая...

Вывод: где-то глюк в DLL


Desdechado   (2006-08-08 16:01:00) [5]

> а про освобождение забывает иногда
Забывают обычно программисты, причем, что примечательно, степень забывчивости обратно пропорциональна величине опыта.

> всякими DLL которые я не использую
Да ну! А ты не думал, что полвинды состоит из DLL? Да и DLL Могут друг дружку с радостью вызывать, тебя не спрашивая...


ANTPro   (2006-08-08 15:53:00) [6]

После просмотра WinHEX'ом оказалось что эта память татиться всякими DLL которые я не использую


ANTPro   (2006-08-04 22:43:00) [7]

Desdechado ©   (04.08.06 18:09) [9]
Винда то знает как выделять, а про освобождение забывает иногда :(

Leonid Troyanovsky ©   (04.08.06 20:29) [10]
У меня их две у первой 256MB у второй 768MB + 1GB своп Windows XP SP2
Первой хватает, а вот вторая иногда ругается что ей мало :)


Leonid Troyanovsky   (2006-08-04 20:29:00) [8]


> ANTPro ©   (04.08.06 18:02) [8]

> У меня 1GB RAM !!!


Хорошо.
Ну, а, скажем, у винды сколько?

--
Regards, LVT.


Desdechado   (2006-08-04 18:09:00) [9]

while( not Undesrtand[7] ) do
Read[7];


ANTPro   (2006-08-04 18:02:00) [10]

Desdechado ©   (26.07.06 11:42) [7]
У меня 1GB RAM !!!


Desdechado   (2006-07-26 11:42:00) [11]

Винда лучше знает, как выделять память при запуске. Купи еще планку и не парься. Или не запускай ничего вовсе.


ANTPro   (2006-07-26 02:36:00) [12]

> Это память не твоя, а Путь до файла

Путь длинной в метр!!!

Если пользовать :
ShellExecute(0, nil, PChar(Путь до файла *.lnk),nil, nil,SW_SHOWNORMAL);


то памяти хавается ~1mb
,а если :
ShellExecute(0, nil, PChar(Путь до файла *.exe),nil, nil,SW_SHOWNORMAL);

то памяти хавается ~0.3mb

Почему? Можно ли её очистить?


Anatoly Podgoretsky   (2006-07-23 12:08:00) [13]

ANTPro ©   (12.07.06 00:27)  
Это память не твоя, а Путь до файла


C@N   (2006-07-22 23:58:00) [14]

кажется мне что ShellExecute - это "защищенный" и так сказать более виндовооболочный тип запуска чужой проги, при которой она засаживается в область памяти выделенной ОСкой, в перекрест с областью занимаемой твоей прогой..., но при сшелэкзекьюте, получить по этой причине хендл запускаемого гораздо сложнее, а при createProcess ты создаеш процесс, не зависимый от твоего приложения, но можеш без проблем получить хендл инициируемого тобой процесса.... вот и не удивляйся что и кто как память кушает)))
если я где-то не прав...мастера меня поправят...)))


ANTPro   (2006-07-12 20:10:00) [15]

Вот побольше инфы:

ShellExecute
          Память Вирт.Память
Start       4 212 1 872
MouseMove   4 292 1 876 Мышой по водил по форме
MouseDown1  5 768 3 320 ShellExecute (правда не 2-3 mb)
Через 5с    5 336 3 148
MouseDown2  5 808 3 328 ShellExecute
Через 5с    5 356 3 156
Minmnimized   316 3 156 Свернул (Удивился)
Move&Resize 1 008 3 156 Восстановил Задействовал кучу процедур
MouseDown3  2 948 3 320 ShellExecute
Через 5с    2 508 3 148
Move&Resize 2 532 3 148
MouseDown4  3 000 3 336 ShellExecute
Через 5с    2 508 3 148
   
WinExec  
         Память Вирт.Память
Start      4 232 1 872
MouseMove  4 284 1 876
MouseDown1 4 404 1 880

None
         Память Вирт.Память
Start      4 240 1 872
MouseMove  4 312 1 876
MouseDown1 4 316 1 876
Minnimized   448 1 876
MouseMove    964 1 876
MouseDown2   988 1 876

Код:
procedure TForm1.KOLFormMouseDown(Sender: PControl;
 var Mouse: TMouseEventData);
var
 i:Integer;
 S:String;
begin
 if Mouse.Button=mbLeft then
 begin
   I:=((Form.Width+2) div 40)*((Mouse.Y+2) div 40)+((Mouse.X+2) div 40);
   if I


ANTPro   (2006-07-12 18:19:00) [16]

Блин а я чё делаю !!!
Через CreateProcess такого нет


Сергей М.   (2006-07-12 09:00:00) [17]

ShelExecute() не имеет к этому отношения.
А если бы и имела, то тревогу стоило бы поднимать лишь в случае прогрессирующейутечки памяти, т.е. приращение на те самые 2..3 мб происходило бы всякий раз при очередном вызове ShelExecute(), а не однократно при самом первом ее вызове.

Перед вызовом ShelExecute() зафиксируй состояние ресурсов памяти твоего процесса. Вызови ShelExecute(). Сравни состояние ресурсов памяти после выполнения ShelExecute() с состоянием до вызова. Сверни окно (окна) своего приложения. Повтори сравнение. Удивись.


Наверх

Титульная страница Поиск, карта сайта Написать письмо