Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
1-1153720834
Zilog_
2006-07-24 10:00
2006.09.03
Есть ActiveX компонент, как обработать его сообщения?


4-1146765278
Colonel
2006-05-04 21:54
2006.09.03
Активизация окна


4-1144147115
balepa
2006-04-04 14:38
2006.09.03
CreateProcess, ShellExecute, WinExec


2-1155225004
Fu
2006-08-10 19:50
2006.09.03
Функция


6-1143721565
vic_774N
2006-03-30 16:26
2006.09.03
решение проблемы подсей





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский