![]() |
|
|
#1
|
|||
|
|||
![]() Как можно уменьшить загрузку ЦП exe, что меньше кушала оперативной памяти
|
#2
|
||||
|
||||
![]() Пиши на Windows API. Но это долго и муторно.
Программирование - это искусство и наш смысл жизни. |
#3
|
||||
|
||||
![]() Может тебе нужно лишь поменять приоритет процесса, думаю этого тебе хватит?
|
#4
|
|||
|
|||
![]() а как это в коде можно сделать?, а то просто аж 6 метров берет..(((
|
#5
|
|||
|
|||
![]() ау, ну что никто не знает?
|
#6
|
|||
|
|||
![]() Загрузка ЦП и размер памяти, это разные вещи.
Как изменить приоритет, подробно описано здесь Как оптимизировать приложения на Delphi, описано здесь Почитай еще вот это Последний раз редактировалось Rat, 23.09.2008 в 14:49. Причина: Забыл дописать |
#7
|
|||
|
|||
![]() Почитай несколько книг по оптимизации программ.
1. Один из основных медодов минимизации исходного кода это, как сказал moo2k, использовать API и в памяти меньше места и файл меньше весит. 2. Если тебе критично занимаемое место на диске можно воспользоваться прогой ASPack, но я не думаю что сейчас это актуально. 3. По загрузки с ЦП я присоединюсь к M.A.D.M.A.N., но эта проца увеличивает обработку по времени. На небольших циклах это незаметно. При обработки больших и сверх больших циклов эта проца тоже может отнимать 90% - 99% ресурсов ЦП если обработка проскакивает быстро, хотя не дает программе подвиснуть и повесить ЦП. Ну например Код:
while true do begin Application.ProccessMessage; Edit1.Text:='1'; end; Где то здесь я видел аналог этой проце. Хотя проца почти незаменима в циклах. Хотя мнений может быть много и все они будут правильны по своему. тут надо подходить к каждой ситуации отдельно. Програмист приходит на стрельбище. Стреляет. Прапор смотрит на мешень и говорит Прапор: вы не попали ни один раз. Программист: Пули вылетели, проблемы у вас. |
#8
|
|||
|
|||
![]() И еще одно если твоя прога равботает с БД и данными, то данные с БД грузятся в твою прогу и она соответственно растет. т.ч. если она будет весить 20 или 22 метра после некоторых манипцляций это не существенно.
Програмист приходит на стрельбище. Стреляет. Прапор смотрит на мешень и говорит Прапор: вы не попали ни один раз. Программист: Пули вылетели, проблемы у вас. |
#9
|
|||
|
|||
![]() Любые данные которые читает прога из файли или из БД или из реестра так или иначе грузятся в память
Програмист приходит на стрельбище. Стреляет. Прапор смотрит на мешень и говорит Прапор: вы не попали ни один раз. Программист: Пули вылетели, проблемы у вас. |
#10
|
|||
|
|||
![]() спасибо разобрался
![]() |
#11
|
|||
|
|||
![]() Цитата:
Если ваша программа редко использует какие либо функции или процедуры, то вынесите их в DLL файл, чтоб память не засоряли (хотя сейчас это и не так важно, памяти оперативной “куча” 1 - 2 гигабайта это уже не редкость, но всё же это подчеркнёт Ваш профессионализм). ты случайно не знаешь как это можно сделать, если делал можешь подробно описать, зарание благодарен |
#12
|
||||
|
||||
![]() Цитата:
Многие наоборот стремятся распространять свои программы одним файлом, а ты... ![]() Зачем тебе этот гемор с библиотеками? ![]() ![]() ![]() |
#13
|
|||
|
|||
![]() Цитата:
1. именно так и делаю выножу в dll обработку которая требуется редко. и дело не в занимаемой памяти. Тут все проще чем меньше прога весит в оперативе тем быстрее и стабильнее она работает. 2. Что сделать? снизить затраты в ЦП и памяти? 3. для увеличение быстродействия не создавайте громоских процеду, а старайтесь делить на небольшие процы и функции. Например чтение из реестра можно написать двумя способами. Но второй показал более оптимальные параметры и меньшее время (При многократнм обращении). Способ 1: Код:
const cKeyRoot: HKEY = HKEY_CURRENT_USER ; cKey: string = '\Software\MyProg'; Var Reg: TRegistry; function GetStrReg(RootKey:HKey;Key:string):string; begin Reg:=TRegistry.Create; Reg.RootKey:=RootKey; Reg.OpenKey(Key,False); Result:=Reg.ReadString(Param); Reg.CloseKey; Reg.Free; end; Второй способ Код:
const cKeyRoot: HKEY = HKEY_CURRENT_USER ; cKey: string = '\Software\ibc'; var Reg: Tregistry procedure CreateReg(RootKey: HKEY;Key:string); begin Reg:=TRegistry.Create; Reg.RootKey:=RootKey; Reg.OpenKey(Key,false); end; procedure FreeReg; begin Reg.CloseKey; Reg.Free; end; function ReadIntReg(RootKey:HKEY; Key,Param: string): integer; begin CreateReg(RootKey,Key,False); Result:=Reg.ReadInteger(Param); FreeReg; end; //---------------------------------------------------------- function ReadStrReg(RootKey:HKEY; Key,Param: string): String; begin CreateReg(RootKey,Key,False); Result:=Reg.ReadString(Param); FreeReg; end; К тому же второй более гибкий Програмист приходит на стрельбище. Стреляет. Прапор смотрит на мешень и говорит Прапор: вы не попали ни один раз. Программист: Пули вылетели, проблемы у вас. Последний раз редактировалось dmdx, 24.09.2008 в 13:08. |