![]() |
Re: NonVCL Version von Classes.dcu
Zitat:
Schau einfach mal in der Classes.pas, hast ja die D6Pro. |
Re: NonVCL Version von Classes.dcu
Zitat:
Zitat:
Du kannst den folgenden Speichermanager, der nichts anderes macht als den Windows-Speichermanager aufzurufen, ja mal als Ersatz nehmen. (Erste Unit im Projektquellcode). Der Geschwindigkeitsunterschied bei vielen Komponenten auf den Formularen ist spürbar.
Delphi-Quellcode:
unit WinMemMan;
interface uses Windows; implementation const HEAP_NO_SERIALIZE = 1; HEAP_ZERO_MEMORY = 8; HeapFlags: array[False..True] of Cardinal = (HEAP_NO_SERIALIZE, 0); var ProcessHeap: THandle; function HeapGetMem(Size: Integer): Pointer; begin Result := HeapAlloc(ProcessHeap, HeapFlags[IsMultiThread], Size); end; function HeapFreeMem(P: Pointer): Integer; begin if HeapFree(ProcessHeap, HeapFlags[IsMultiThread], P) then Result := 0 else Result := 1; end; function HeapReallocMem(P: Pointer; Size: Integer): Pointer; begin Result := HeapReAlloc(ProcessHeap, HeapFlags[IsMultiThread], P, Cardinal(Size)); end; procedure InitializeHeapMemManager; var HeapMemManager: TMemoryManager; begin ProcessHeap := GetProcessHeap; HeapMemManager.GetMem := HeapGetMem; HeapMemManager.FreeMem := HeapFreeMem; HeapMemManager.ReallocMem := HeapReallocMem; SetMemoryManager(HeapMemManager); end; initialization InitializeHeapMemManager; end. |
Re: NonVCL Version von Classes.dcu
[quote="scp"]
Zitat:
Zitat:
|
Re: NonVCL Version von Classes.dcu
Stimmt, die kenn ich zwar, hatte sie aber jetzt völlig ausser acht gelassen. Na dann eine andere Theorie:
Ist es nicht möglich, das bei einem dynamischen Array intern die gleiche vorgehensweise wie bei TStringList verwendet wird? |
Re: NonVCL Version von Classes.dcu
Natürlich. Schau dir einfach mal an, wie Borland das bei TStringList/TList mit Capacity gelöst hat. Einfach mal die gesamte Classes.pas nach Capacity durchsuchen. Dort wirst du auch eine schöne Formel finden, die sehr effektiv ist.
Da TStringList/TList noch aus Delphi 1 Zeiten stammen, wo dynamischen Arrays noch nicht vom Compiler unterstützt wurden, hat Borland einfach die "alte Art" der dynamischen Arrays benutzt. |
Re: NonVCL Version von Classes.dcu
Ich selbst nutze sowieso mittlerweile die "alte Variante", da ich die Quelltexte auch auf D3 laufen haben will. Schliesslich kann sich das jetzt jeder leisten.
Aber interessant mal die doch gravierenden Unterschiede kennenzulernen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:33 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