Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.03;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.066 c
15-1155200212
Slym
2006-08-10 12:56
2006.09.03
Помогите найти статью на тему Интернета и Эл.почты


2-1155117043
Sistr
2006-08-09 13:50
2006.09.03
чернобелое -> цветное


1-1153308395
Youta
2006-07-19 15:26
2006.09.03
Как расположить окно поверх другого, когда выполняется длинный пр


15-1154928330
Ega23
2006-08-07 09:25
2006.09.03
С Днём рождения! 7 августа


15-1154968330
Евгений К.
2006-08-07 20:32
2006.09.03
Стоит ли переходить на D2005???