![]() |
TMemo-Ersatz mit mehr Kapazität?
Hallo Zusammen,
nachdem das eingebaute TMemo bei 280MB die Grätsche macht, suche ich einen Ersatz. Alles was das Leben bunt und komfortabel macht ist vollkommen unnötig. Zitat:
(warum soll ich das Ding neu programmieren, wenn es schon etwas gibt?) Gruß K-H |
AW: TMemo-Ersatz mit mehr Kapazität?
Tritt das Problem auch auf, wenn du ein TRichEdit verwendest?
Die andere Frage: Warum willst du 280MB Text (auf einmal) auf dem Bildschirm anzeigen? :stupid: :mrgreen: |
AW: TMemo-Ersatz mit mehr Kapazität?
Zitat:
Zitat:
Es knallt übrigens bei SetTextStr.
Delphi-Quellcode:
Gruß
procedure TStrings.LoadFromStream(Stream: TStream);
var Size: Integer; S: string; begin BeginUpdate; try Size := Stream.Size - Stream.Position; SetString(S, nil, Size); Stream.Read(Pointer(S)^, Size); SetTextStr(S); finally EndUpdate; end; end; K-H |
AW: TMemo-Ersatz mit mehr Kapazität?
Dann beobachte mal den tatsächlichen Speicherbedarf. Ggf. stellst Du dann auf 64 bit um ;)
|
AW: TMemo-Ersatz mit mehr Kapazität?
Bedenke, daß du den Text hier eventuell 3 Mal im Arbeitsspeicher hast.
- im Stream (je nach Typ) - im String - und dann nochmal im Memo Bei Unicode-Delphis (2009+) sind die Daten dann auch noch doppelt so groß. Es sind also 850 MB nötig und davon je 3 Mal mindestens 280 MB "zusammenhängend", was nicht so einfach zu finden ist. |
AW: TMemo-Ersatz mit mehr Kapazität?
Zitat:
Je nachdem was du vorhast, könnte es sich lohnen die Anzeige selbst zu übernehmen und nur den aktuellen Teil der Datei wirklich auszulesen und anzuzeigen. |
AW: TMemo-Ersatz mit mehr Kapazität?
Zitat:
Zitat:
Zitat:
(nicht daß einer auf dumme Gedanken kommt, alle Aktionen auf dem Text laufen über Tstrings/Tstringlist) @Nuclearping im Prinzip funktioniert das Einlesen, nur das Wegschreiben erfolgt leider im RTF-Format, daran könnte man bestimmt drehen. Und die Performance ist leider vollkommen indiskutabel. Gruß K-H |
AW: TMemo-Ersatz mit mehr Kapazität?
Hi,
nur am Rande: Bin selbst kein vi-Kenner, aber nachdem ich ein 1 GByte großes MySQL Dump manuell bearbeiten musste, ist es inzwischen zu einem Tool geworden, das ich dafür halt nutze. Alles andere hat schlicht versagt. Und zum selbst programmieren fehlt mir schlicht die Zeit.. Wenn Du also ein Linux zur Hand hast: Nutze es und erfinde das Rad nicht neu... ;-) Grüße |
AW: TMemo-Ersatz mit mehr Kapazität?
Vielen Dank nochmal an alle.
Ich habe ein wenig "nonvisuell" erledigt und es dann doch geschaft, die Datei zu laden. Bei dem Ladevorgang (TMemo.LoadfromFile) schnellte der Speicherbedarf auf ca 1,6 GByte hinauf. Nachdem Die Anzeige Erfolgt war, waren es nur noch 550 MB. Bei einem Bearbeitungsschritt
Delphi-Quellcode:
immer noch ca 1,3 GByte.
TStringlist.Text:=TMemo.Lines.Text;
{Machwas} TMemo.Lines.Text:=Tstringlist.Text; Da ist wohl noch Optimierungspotential. Gruß K-H |
AW: TMemo-Ersatz mit mehr Kapazität?
Zitat:
|
AW: TMemo-Ersatz mit mehr Kapazität?
Zitat:
Bei einer TStringList sind alle Lines einzelne Strings. TStringList.Text erstellt einen großen String, aus den vielen ein Einzelstrings und das wird erst zugewiesen. Bei TStringList.Assign und TStringList.AddStrings werden die Strings aber einzeln übergeben, ohne wie erst zusammenzusetzen und dann wieder auseinanderzunehmen, weswegen
Delphi-Quellcode:
praktisch der absolute Overkill ist.
TStringList.Text := TStringList.Text
Es kommt aber immer darauf an, wie der Speicher hinter TStrings verwaltet wird und wie gut die Methoden des TStrings darauf abgestimmt sind. So macht z.B. ein Memo.Lines.Text das Selbe wie Memo.Text und liest nicht erst "langsam" die einzelnen Lines aus, welche danach wieder zusammengesetzt werden müssten. PS: Da du dich an den Grenzen des Speichermanagements bewegst ... Es brauchten nur ein paar Bytes einen der großen den freien Speicherblöcke teilen, welche du grade noch so verwendet hast und schon war es das. *peng* |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 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 by Thomas Breitkreuz