AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TMemo-Ersatz mit mehr Kapazität?

Ein Thema von p80286 · begonnen am 21. Jan 2014 · letzter Beitrag vom 23. Jan 2014
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#1

TMemo-Ersatz mit mehr Kapazität?

  Alt 21. Jan 2014, 12:47
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:
Im Projekt XXXXX ist eine Exception der Klasse EInvalidOperation aufgetreten. Meldung: 'Text überschreitet Memo-Kapazität'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
Kennt Ihr da etwas, oder könnt Ihr etwas empfehlen?

(warum soll ich das Ding neu programmieren, wenn es schon etwas gibt?)

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: TMemo-Ersatz mit mehr Kapazität?

  Alt 21. Jan 2014, 12:58
Tritt das Problem auch auf, wenn du ein TRichEdit verwendest?

Die andere Frage: Warum willst du 280MB Text (auf einmal) auf dem Bildschirm anzeigen?
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

AW: TMemo-Ersatz mit mehr Kapazität?

  Alt 21. Jan 2014, 13:23
Tritt das Problem auch auf, wenn du ein TRichEdit verwendest?
Gute Idee! Scheint zu funktionieren!

Die andere Frage: Warum willst du 280MB Text (auf einmal) auf dem Bildschirm anzeigen?
Gute Frage! Da ich etwas mehr möchte als nur Anzeigen, schien mir TMemo eine gute Wahl zu sein.
Es knallt übrigens bei SetTextStr.

Delphi-Quellcode:
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;
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: TMemo-Ersatz mit mehr Kapazität?

  Alt 21. Jan 2014, 13:31
Dann beobachte mal den tatsächlichen Speicherbedarf. Ggf. stellst Du dann auf 64 bit um
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: TMemo-Ersatz mit mehr Kapazität?

  Alt 21. Jan 2014, 13:46
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.
$2B or not $2B

Geändert von himitsu (21. Jan 2014 um 13:49 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: TMemo-Ersatz mit mehr Kapazität?

  Alt 21. Jan 2014, 14:16
Gute Frage! Da ich etwas mehr möchte als nur Anzeigen, schien mir TMemo eine gute Wahl zu sein.
Lässt sich das nicht vor der Anzeige nonvisuell erledigen?

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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: TMemo-Ersatz mit mehr Kapazität?

  Alt 21. Jan 2014, 16:12
Es sind also 850 MB nötig und davon je 3 Mal mindestens 280 MB "zusammenhängend", was nicht so einfach zu finden ist.
Jo beim Testen hab ich mal auf den Taskmanager geschaut, das Programm krallt sich ein gutes Gigabyte.

Lässt sich das nicht vor der Anzeige nonvisuell erledigen?
Leider nein, ich weiß nicht was reinkommt, und an Hand der angezeigten daten enscheide ich was gemacht wird (Textverarbeitung nach alter Väter Sitte).

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.
Naja für die reine Anzeige hab ich auch etwas sparsames in der Schublade. Aber für ein "Find and Replace" wäre es ganz schön einfach aus dem angezeigten Text heraus zu kopieren.

(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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.381 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: TMemo-Ersatz mit mehr Kapazität?

  Alt 21. Jan 2014, 16:46
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
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#9

AW: TMemo-Ersatz mit mehr Kapazität?

  Alt 23. Jan 2014, 10:55
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:
TStringlist.Text:=TMemo.Lines.Text;
{Machwas}
TMemo.Lines.Text:=Tstringlist.Text;
immer noch ca 1,3 GByte.

Da ist wohl noch Optimierungspotential.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#10

AW: TMemo-Ersatz mit mehr Kapazität?

  Alt 23. Jan 2014, 11:23
Leider nein, ich weiß nicht was reinkommt, und an Hand der angezeigten daten enscheide ich was gemacht wird (Textverarbeitung nach alter
Du wirst ja wohl nicht alle Datenformate der Welt unterstützen bzw. verarbeiten wollen? Du kannst doch sicherlich eine Fallunterscheidung programmieren. Schließlich triffst Du die ja auch manuell beim Betrachten des Memo-Inhaltes.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:34 Uhr.
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