Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi kleine Lücken im Heap optimal verwenden? (https://www.delphipraxis.net/147778-kleine-luecken-im-heap-optimal-verwenden.html)

himitsu 16. Feb 2010 11:47

Re: kleine Lücken im Heap optimal verwenden?
 
Du kannst dieses und andere nette Dinge sogar in Delphi nachrüsten
> DelphiSpeedUp > http://www.delphipraxis.net/internal...ct.php?t=80522

Dieses betrifft dann aber nur Delphi und ändert keines der damit erstellten Programme.

Eigentlich dachte ich, daß es diese Verbesserungen auch für's Programm gab.

Das VCL-Fix-Pack enthält ja nur Fehlerbehebungen: http://www.delphipraxis.net/internal...=966823#966823
Bzw. ab wann hatte Borland eigentlich das FastCodeProjekt übernommen und integriert?

Jaynder 16. Feb 2010 12:57

Re: kleine Lücken im Heap optimal verwenden?
 
Zitat:

Zitat von BrightAngel
-Speicherblock (größe: n*sizeof(TRecordX)) wird angefordert
-TList mit n Pointern auf jeweils ein TRecordX <--die ist mein problem+
-Jetzt KANN es passieren, dass wieder ein Speicherblock wie oben angefordert wird.
-Die Liste "frisst". Nach ein Paar Zyklen ist sie zu groß für den Speicherbereich Folge: sie wird verschoben.
Dieser Bereich ist aber gerade zu Anfangs so klein, dass die zu anfordernten Speicherblöcke zu groß sind, um in die von TList freigewordenen Plätze reinzupassen. Ich habe schon mit dem Gedanken gespielt, ein gleichgroßer Speicherblock standartmäßig für diese Tlist zu verwenden, sodass er später anders verwendet werden kann, aber ist das das Gelbe vom Ei?
[EDIT1]Bzw. Wenn FastMM immer nährungsweise größere Blöcke anfordert, dann ist meine Methode ja auch Kontraproduktiv, weil bei jedem, immer fix bleibendem Block reste entstehen???[/EDIT1]

Würde es mir was bringen, wenn ich einen eigenen Heap extra dafür erschaffen würde??? also via createHeap etc?
Brighty

Auch da mache dir nicht so viele Gedanken. Denn erstens vergrößert sich TList beim Add "intelligent" mit der Methode Grow
Delphi-Quellcode:
procedure TList.Grow;
var
  Delta: Integer;
begin
  if FCapacity > 64 then
    Delta := FCapacity div 4
  else
    if FCapacity > 8 then
      Delta := 16
    else
      Delta := 4;
  SetCapacity(FCapacity + Delta);
end;
und zweitens: wenn du evtl. vorher weißt, dass die Liste sehr groß wird, kannst du sie mit Liste.Capacity := 999999 von vornherein auf einen großen Wert setzen und hinterher evtl. mit Liste.Capacity := Liste.Count wieder reduzieren

himitsu 16. Feb 2010 13:10

Re: kleine Lücken im Heap optimal verwenden?
 
Zitat:

Zitat von Jaynder
Auch da mache dir nicht so viele Gedanken. Denn erstens vergrößert sich TList beim Add "intelligent" mit der Methode Grow[delphi]

Dieses laß ich inzwischen oftmals, da FastMM sowas auch schon macht, welches dann TList indirekt ausnutzen würde. :angel2:

Sowas wie "und zweitens" würde da schon mehr bringen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 Uhr.
Seite 2 von 2     12   

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