![]() |
Tricks um Programm zu beschleunigen
Jetzt mal ne allgemeine Frage...ich hab ein Programm (eigentlich trifft es bei vielen programmen zu) das esxtrem langsam ist.
Meine Frage: welche Tricks verwendet ihr um eure programme schneller zu machen? |
Re: Tricks um Programm zu beschleunigen
Neuer PC
|
Re: Tricks um Programm zu beschleunigen
Zitat:
Nee, im Ernst. Wie sollen wir denn diese Frage pauschal beantworten? :gruebel: |
Re: Tricks um Programm zu beschleunigen
1. Algorhytmus (ist bestimmt wieder falsch geschrieben) optimieren.
2. Umsetzung optimieren. Optimieren ist ein Vorgang, der sehr von der Aufgabe abhängig ist und ohne zu wissen, was bei dir so langsam ist, kann man dir kaum helfen. |
Re: Tricks um Programm zu beschleunigen
naja ich suche nach allgemein gültigen aussagen nachdenen man sich richten kann wenn man versucht seine programm schneller zu machen...
z.b.: ist ein unterschied bei den verschiedenen schleifen? (if, while, repeat)??? solche sachen...keine ahnung welche tipps da geben kann... [eidt]ob man bestimmte units eher vermeiden sollte usw....[/edit] |
Re: Tricks um Programm zu beschleunigen
afaik ist eine forschleife schneller als die anderen beiden, da sie die Bedingung nur einmal prüft.
btw: Algorithmus ;P |
Re: Tricks um Programm zu beschleunigen
Allgemeine Tipps wären:
- Verwende bei Records/Strings/WideStrings const-Parameter. - Wenn das Programm viel mit Speicheranforderungen/freigabe macht bau einen besseren Speichermanager ein (z.B. FastMM) Aber ich würde erstmal z.B. mit ![]() |
Re: Tricks um Programm zu beschleunigen
Die Performance-Optimierung ist eine recht trockene Angelegenheit. Zuerst musst Du in Deiner Anwendung die Stellen finden, die die meiste Zeit benötigen. Nur dort und nirgendwo anders lohnt sich das Optimieren. Ein Werkzeug für so eine Analyse wird zum Beispiel ein Profiler sein.
Und danach geht's entweder um Algorithmik (spannend, aber auch trocken) oder aber um Speichermanagement bzw. Steuerung des Programmablaufes (zum Beispiel über die Direktive "inline"). Pauschal lässt sich diese Frage nicht beantworten - sollte es Dir doch gelingen, hier eine wirklich gute und allgemeingültige Antwort zu finden, so lasse Dir das Verfahren vor Veröffentlichung schützen. ;-) Je nach Typ Deiner Anwendung könnte ein schnellerer Speichermanager wie FastMM ein wenig helfen, doch die eigentlichen Sprünge wirst Du nur machen könnenm, wenn Du das Problem isolierst und an der Wurzel anpackst. |
Re: Tricks um Programm zu beschleunigen
ich geb mal mein konkretes beispiel:
unit stammt von ![]()
Delphi-Quellcode:
die ganzen schleifen (denke ich) machen die unit so lam....könnt ihr mir zeigen wie ihr das beschleunigen würdet.
unit ActiveConnections;
interface uses windows, classes, Unit1; procedure ScanNetworkResources(ResourceType, DisplayType: DWord; List: TStrings); implementation type PNetResourceArray = ^TNetResourceArray; TNetResourceArray = array[0..100] of TNetResource; function CreateNetResourceList(ResourceType: DWord; NetResource: PNetResource; out Entries: DWord; out List: PNetResourceArray): Boolean; var EnumHandle: THandle; BufSize: DWord; Res: DWord; begin Result := False; // List := Nil; Entries := 0; if WNetOpenEnum(RESOURCE_GLOBALNET, ResourceType, 0, NetResource, EnumHandle) = NO_ERROR then begin try BufSize := $4000; // 16 kByte GetMem(List, BufSize); try repeat Entries := DWord(-1); FillChar(List^, BufSize, 0); Res := WNetEnumResource(EnumHandle, Entries, List, BufSize); { if Res = ERROR_MORE_DATA then begin ReAllocMem(List, BufSize); end; } until Res <> ERROR_MORE_DATA; Result := Res = NO_ERROR; if not Result then begin FreeMem(List); List := Nil; Entries := 0; end; except FreeMem(List); raise; end; finally WNetCloseEnum(EnumHandle); end; end; end; procedure ScanNetworkResources(ResourceType, DisplayType: DWord; List: TStrings); procedure ScanLevel(NetResource: PNetResource); var Entries: DWord; NetResourceList: PNetResourceArray; i: Integer; begin if CreateNetResourceList(ResourceType, NetResource, Entries, NetResourceList) then try for i := 0 to Integer(Entries) - 1 do begin if (DisplayType = RESOURCEDISPLAYTYPE_GENERIC) or (NetResourceList[i].dwDisplayType = DisplayType) then begin If (Copy(NetResourceList[i].lpRemoteName,1,2)='\\') then Form1.ListBox1.Items.AddObject(NetResourceList[i].lpRemoteName, Pointer(NetResourceList[i].dwDisplayType)); end; if (NetResourceList[i].dwUsage and RESOURCEUSAGE_CONTAINER) <> 0 then ScanLevel(@NetResourceList[i]); end; finally FreeMem(NetResourceList); end; end; begin ScanLevel(Nil); end; end. |
Re: Tricks um Programm zu beschleunigen
lagere Die bettr. Funktionen doch "einfach" in einen Thread aus :-D
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz