Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Tricks um Programm zu beschleunigen (https://www.delphipraxis.net/59187-tricks-um-programm-zu-beschleunigen.html)

XeRo 19. Dez 2005 07:46


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?

Pseudemys Nelsoni 19. Dez 2005 07:49

Re: Tricks um Programm zu beschleunigen
 
Neuer PC

Jelly 19. Dez 2005 07:49

Re: Tricks um Programm zu beschleunigen
 
Zitat:

Zitat von XeRo
welche Tricks verwendet ihr um eure programme schneller zu machen?

Wir sind alle besser wie :mrgreen:

Nee, im Ernst. Wie sollen wir denn diese Frage pauschal beantworten? :gruebel:

jim_raynor 19. Dez 2005 07:49

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.

XeRo 19. Dez 2005 07:53

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]

Pseudemys Nelsoni 19. Dez 2005 07:56

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

Bernhard Geyer 19. Dez 2005 07:58

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 AQTime schauen wo genau die Geschwindigkeit "verloren" wird. Ich hatte schon genügend Fälle in denen eine zu häufige Aktualisierung der Anzeige (Statusmeldung) die Performancebremse war.

Daniel 19. Dez 2005 08:02

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.

XeRo 19. Dez 2005 08:08

Re: Tricks um Programm zu beschleunigen
 
ich geb mal mein konkretes beispiel:

unit stammt von Florian Bernd
Delphi-Quellcode:
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.
die ganzen schleifen (denke ich) machen die unit so lam....könnt ihr mir zeigen wie ihr das beschleunigen würdet.

FriFra 19. Dez 2005 08:23

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:23 Uhr.
Seite 1 von 4  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz