Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2014, 16:31   #1
Xo66um
Форумчанин
 
Регистрация: 11.05.2013
Сообщений: 154
По умолчанию ShellExecute. Генерация мусора

Всем привет.

При использовании функции ShellExecute в программе создается несколько потоков, и потребляется на ~1МБ оперативной памяти больше, т.е. если к примеру, программа занимала ~500 кб, то после использования этой функции программа начинает жрать уже ~1.5МБ оперативы, что не очень устраивает.
Поэтому вопрос: есть ли способ завершить потоки (не трогая мои потоки) и освободить память, которые создала и нагрузила эта функция?
Xo66um вне форума Ответить с цитированием
Старый 14.05.2014, 16:38   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Что курим? Мне отсыпьте... ShellExecute не создает потоки вообще, она выполняется в том же потоке, в котором вы её вызвали.
Человек_Борща вне форума Ответить с цитированием
Старый 14.05.2014, 16:48   #3
Xo66um
Форумчанин
 
Регистрация: 11.05.2013
Сообщений: 154
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Что курим? Мне отсыпьте... ShellExecute не создает потоки вообще, она выполняется в том же потоке, в котором вы её вызвали.
Вообще-то создает... Скриншоты прилагаются.
Верхний - до использования функции, нижний - после.
Изображения
Тип файла: jpg Untitled-1.jpg (69.3 Кб, 80 просмотров)

Последний раз редактировалось Xo66um; 14.05.2014 в 17:02.
Xo66um вне форума Ответить с цитированием
Старый 14.05.2014, 16:50   #4
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Xo66um

предыдущего оратора не слушай, он не в курсе, что вызов ShellExecute инициализирует внутреннюю подсистему ShellAPI. Оно и потоки создает, и кучу хэндлов открывает.

Поэтому вопрос: есть ли способ завершить потоки (не трогая мои потоки) и освободить память, которые создала и нагрузила эта функция?

документированного нет.
Rififi вне форума Ответить с цитированием
Старый 14.05.2014, 16:51   #5
Xo66um
Форумчанин
 
Регистрация: 11.05.2013
Сообщений: 154
По умолчанию

Rififi, может соображения по этому поводу есть?
Xo66um вне форума Ответить с цитированием
Старый 14.05.2014, 16:56   #6
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Смириться.
либо отказаться от использования ShellExecute
Rififi вне форума Ответить с цитированием
Старый 14.05.2014, 16:57   #7
Xo66um
Форумчанин
 
Регистрация: 11.05.2013
Сообщений: 154
По умолчанию

Rififi, понятно
Отзыв добавил, спасибо.
Xo66um вне форума Ответить с цитированием
Старый 14.05.2014, 17:02   #8
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

а у меня не создает ...
eval вне форума Ответить с цитированием
Старый 14.05.2014, 17:02   #9
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Rififi, ни разу ничего не создавало у меня, лишь только запускалось то, что я указал.
Специально сейчас проверил, что на XP что на 8.1, как было 2 потока до выполнения, что после запуска и выполнения, такосталось 2. Памяти на 2 Мб приросло, всего-то.

Другое дело, туева хуча всяких супир-мусоркомпонентиков, скинов и всего прочего где может понадобится ThreadTimer, для фоновой работыс эффектами, аля анимация ажалия, отпуская кнопки.

А ещёантивирус лепит свой thrread к процессу, тоже самое делает и отладчик IDE, ещё всякий хлам от винды цепляется(Shell,он же explorer имеет такого добра валом).
Стоит задуматься, в стерильно ли среде вы опыт провели, а потом задавать глупый вопрос, почемупосле shellexecute 100500 потоков зависает.

Вообще, чего волнуетесь из-заэтого? Вы живете вмире многопроцессорных технологий и многопоточного исполнения, пусть там хоть 150 потоков висит, ваше ПО будет работать дальше.

Последний раз редактировалось Человек_Борща; 14.05.2014 в 17:14.
Человек_Борща вне форума Ответить с цитированием
Старый 14.05.2014, 17:04   #10
Xo66um
Форумчанин
 
Регистрация: 11.05.2013
Сообщений: 154
По умолчанию

eval, не знаю почему.
Может версия ОСи другая, или версия Delphi.

У меня Delphi 7, ОС Windows 7 (x64, Макс.)

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Специально сейчас проверил, что на XP что на 8.1, как было 2 потока до выполнения, что после запуска и выполнения, такосталось 2. Памяти на 2 Мб приросло, всего-то.
Как по мне, то нагрузка в 2МБ при использовании одной функции - не есть хорошо.
Ладно - потоки, в принципе не мешают. Больше всего не хочу нагружать оперативную память лишний раз, даже несмотря на то, какое железо в наше время делают.

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
А ещёантивирус лепит свой thrread к процессу, тоже самое делает и отладчик IDE, ещё всякий хлам от винды цепляется(Shell,он же explorer имеет такого добра валом).
Стоит задуматься, в стерильно ли среде вы опыт провели, а потом задавать глупый вопрос, почемупосле shellexecute 100500 потоков зависает.
Проверено на Win7 (основная) и WinXP (виртуальная ось), антивирусов нет, вирусов - тоже, отладчик не прикреплен, все вполне "стандартно". Результаты идентичны в принципе.

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Вообще, чего волнуетесь из-заэтого? Вы живете вмире многопроцессорных технологий и многопоточного исполнения, пусть там хоть 150 потоков висит, ваше ПО будет работать дальше.
Хорошо, давайте забудем про рефакторинг кода и оптимизацию приложений, и будем штамповать простые десктопные приложения по 100МБ на фоне. Что нам, жалко что-ли?

Вообще, это личное дело каждого, кому-то все-равно, сколько программа будет выполняться, сколько будет жрать ресурсов и т.д., а кому-то нет.
Поэтому предлагаю на этом закрыть разговор на эту тему, если по вопросу в первом сообщении предложений нет.

Последний раз редактировалось Xo66um; 14.05.2014 в 17:21.
Xo66um вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенос Edit в ShellExecute или переменые в ShellExecute VMG Общие вопросы Delphi 5 11.02.2014 15:12
Сбрщик мусора в C++ 220Volt Общие вопросы C/C++ 6 02.01.2014 10:25
сборщик мусора goluzov Общие вопросы C/C++ 2 29.04.2012 15:25
Сборка мусора EUGY Общие вопросы C/C++ 0 13.06.2011 21:26
Опрос: Сборщик мусора Пепел Феникса Общие вопросы по программированию, компьютерный форум 15 20.04.2011 19:19