Форум: "Начинающим";
Текущий архив: 2006.09.03;
Скачать: [xml.tar.bz2];
ВнизShellExecute Найти похожие ветки
← →
ANTPro © (2006-07-12 00:27) [0]Пишу прогу (панель с кнопками) столкнулся тут с проблемой: при запуске программ с помощью
ShellExecute(0, nil, PChar(Путь до файла),nil, nil,SW_SHOWNORMAL);
моя прога увеличивает использование памяти на 2-3mb. При закрытии запущеного файла использование памяти моей прогой не уменьшается.
Может я что-то не так делаю.
← →
Сергей М. © (2006-07-12 09:00) [1]ShelExecute() не имеет к этому отношения.
А если бы и имела, то тревогу стоило бы поднимать лишь в случае прогрессирующей утечки памяти, т.е. приращение на те самые 2..3 мб происходило бы всякий раз при очередном вызове ShelExecute(), а не однократно при самом первом ее вызове.
Перед вызовом ShelExecute() зафиксируй состояние ресурсов памяти твоего процесса. Вызови ShelExecute(). Сравни состояние ресурсов памяти после выполнения ShelExecute() с состоянием до вызова. Сверни окно (окна) своего приложения. Повтори сравнение. Удивись.
← →
ANTPro © (2006-07-12 18:19) [2]Блин а я чё делаю !!!
Через CreateProcess такого нет
← →
ANTPro © (2006-07-12 20:10) [3]Вот побольше инфы:
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<Length(Bar.Btn) then
begin
Bar.DrawClick.Height:=Bar.DrawBMP.Height;
Bar.DrawClick.Width:=Bar.DrawBMP.Width;
Bar.DrawBMP.Draw(Bar.DrawClick.Canvas.Handle,0,0);
Draw:=2;
Bar.CurIdx:=i;
Bar.DrawFrame:=0;
Timer1.Enabled:=True;
// ShellExecute(0, nil, PChar(Bar.Btn[Bar.CurIdx].CMD),nil, nil,SW_SHOWNORMAL);
// WinExec(PChar(Bar.Btn[Bar.CurIdx].CMD),SW_SHOWNORMAL);
end
else
begin // Перетаскивание
ReleaseCapture;
SendMessage(Form.Handle,WM_SYSCOMMAND,$F012,0);
end;
end;
end;
← →
C@N © (2006-07-22 23:58) [4]кажется мне что ShellExecute - это "защищенный" и так сказать более виндовооболочный тип запуска чужой проги, при которой она засаживается в область памяти выделенной ОСкой, в перекрест с областью занимаемой твоей прогой..., но при сшелэкзекьюте, получить по этой причине хендл запускаемого гораздо сложнее, а при createProcess ты создаеш процесс, не зависимый от твоего приложения, но можеш без проблем получить хендл инициируемого тобой процесса.... вот и не удивляйся что и кто как память кушает)))
если я где-то не прав...мастера меня поправят...)))
← →
Anatoly Podgoretsky © (2006-07-23 12:08) [5]ANTPro © (12.07.06 00:27)
Это память не твоя, а Путь до файла
← →
ANTPro © (2006-07-26 02:36) [6]> Это память не твоя, а Путь до файла
Путь длинной в метр!!!
Если пользовать :ShellExecute(0, nil, PChar(Путь до файла *.lnk),nil, nil,SW_SHOWNORMAL);
то памяти хавается ~1mb
,а если :ShellExecute(0, nil, PChar(Путь до файла *.exe),nil, nil,SW_SHOWNORMAL);
то памяти хавается ~0.3mb
Почему? Можно ли её очистить?
← →
Desdechado © (2006-07-26 11:42) [7]Винда лучше знает, как выделять память при запуске. Купи еще планку и не парься. Или не запускай ничего вовсе.
← →
ANTPro © (2006-08-04 18:02) [8]Desdechado © (26.07.06 11:42) [7]
У меня 1GB RAM !!!
← →
Desdechado © (2006-08-04 18:09) [9]
while( not Undesrtand[7] ) do
Read[7];
← →
Leonid Troyanovsky © (2006-08-04 20:29) [10]
> ANTPro © (04.08.06 18:02) [8]
> У меня 1GB RAM !!!
Хорошо.
Ну, а, скажем, у винды сколько?
--
Regards, LVT.
← →
ANTPro © (2006-08-04 22:43) [11]Desdechado © (04.08.06 18:09) [9]
Винда то знает как выделять, а про освобождение забывает иногда :(
Leonid Troyanovsky © (04.08.06 20:29) [10]
У меня их две у первой 256MB у второй 768MB + 1GB своп Windows XP SP2
Первой хватает, а вот вторая иногда ругается что ей мало :)
← →
ANTPro © (2006-08-08 15:53) [12]После просмотра WinHEX"ом оказалось что эта память татиться всякими DLL которые я не использую
← →
Desdechado © (2006-08-08 16:01) [13]> а про освобождение забывает иногда
Забывают обычно программисты, причем, что примечательно, степень забывчивости обратно пропорциональна величине опыта.
> всякими DLL которые я не использую
Да ну! А ты не думал, что полвинды состоит из DLL? Да и DLL Могут друг дружку с радостью вызывать, тебя не спрашивая...
← →
ANTPro © (2006-08-08 16:29) [14]Desdechado © (08.08.06 16:01) [13]
Забывают обычно программисты
В данном случае я тут непричем, мне освобождать нечего
Desdechado © (08.08.06 16:01) [13]
Да и DLL Могут друг дружку с радостью вызывать, тебя не спрашивая...
Вывод: где-то глюк в DLL
← →
ANTPro © (2006-08-09 19:43) [15]Вот выложил могет поможет (надо запустить кинуть файлы и закрыть потом снова открыть появиться анимация)
http://www.antprog.narod.ru/panel.rar [27,8 КБ]
← →
Anatoly Podgoretsky © (2006-08-09 20:01) [16]Desdechado © (08.08.06 16:01) [13]
Но количество опыта с запасом все перекрывает
← →
ANTPro © (2006-08-10 18:57) [17]Все разобрался вот решение:
SetProcessWorkingSetSize(GetCurrentProcess, dword(-1), dword(-1));
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.09.03;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.045 c