![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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() с состоянием до вызова. Сверни окно (окна) своего приложения. Повтори сравнение. Удивись.