AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

F2046 Zu wenig Arbeitsspeicher (Delphi)

Ein Thema von Sel2012 · begonnen am 7. Nov 2015 · letzter Beitrag vom 13. Nov 2015
Antwort Antwort
Seite 2 von 3     12 3   
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.198 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: F2046 Zu wenig Arbeitsspeicher (Delphi)

  Alt 8. Nov 2015, 10:51
Ich habe also den virtuellen Arbeitsspeicher auf 6000 MB erweitert ...
Seit gefühlt 20 Jahren lässt man die größer der Auslagerungsdatei automatisch von Windows bestimmen. Nur in Spezialfällen stellt man selbst einen Wert ein.
Wenn du dies auf deiner Checkliste für Windowsinstallation hast, lösche diesen Eintrag. Das war noch unter Win3.1 sinvoll, aber nicht mehr bei in 2015 verwendeten Windows-Versionen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
971 Beiträge
 
Delphi 6 Professional
 
#12

AW: F2046 Zu wenig Arbeitsspeicher (Delphi)

  Alt 8. Nov 2015, 10:53

Müssen es den JPEGs sein? Reichen nicht PNGs (in einer ImageListe) auch?
Erstellst du alle Formulare beim Programmstart? Wieso?
Hallo Bernhard,

ohne die Bilder werden 2000 Zeilen aus Memos einzeln nacheinander gelesen und jeder Zeile wird eine kurze mp3-Datei zugeodnet. Nebenbei wird jede Textzeile noch analysiert und farblich bearbeitet - das war's schon. Ich kenne keine Methode, die mp3s zu verkleinern. Das scheint sich aufzusummieren.
Die Bildquellen werden über MultiResBitmaps direkt ins Programm übernommen und nicht separat (zusätzlich) gelagert. Auch dafür kenne ich keine Alternative.
Wie kommst du auf 1500 MB? Die .apk ist auch "nur" 49 MB groß. Keine Ahnung, wie man das schrumpfen kann. Also im Grunde liefern
Memos resourceschonend Text in ein relativ kleines Programm und mp3 wird "beigestellt".
Prinzipiell meine ich, dass XE5 und MSBuild mit 200 MB nicht überfordert sein dürfte, da das Programm nicht komplex verschachtelt ist, sondern fast linear arbeitet.
Aber natürlich greife ich gern Alternativen auf.

Vielen Dank erst einmal
Udo
Puh...
1.) Memos sind Komponenten für die Anzeige von Text 'zur Laufzeit', gerade bei größeren Texten und nicht dafür vorgesehen große Mengen von Text bei Compilierung zu halten!
Und anstelle dann mehrere Memos zu platzieren, solltes Du den ganzen Text in eine separate Textdatei packen und diese einfach mit LoadFromFile laden. Dadurch kannst Du dann diesen Text auch leichter korrigieren oder gar Multilingual machen.
2.) Auch deine Bilder kannst Du in ein separates File nacheinander gereiht packen und dann (ebenfalls zur Laufzeit) öffnen.
Hier würde ein FileStream genügen, bei dem Du die Bilder nacheinander einließt und z.B. in eine ImageList lädst. Auch dadurch hast Du die Möglichkeit, ohne Neukompilierung Bilder zu ersetzen.
3.) Das gleiche wie bei den Bildern kannst Du auch mit deinen MP3s machen.

Somit besteht dein Projekt dann aus einer (kleinen) Exe und 3 weiteren Dateien.

Um noch mehr Platz zu sparen, kannst Du Dir eine Routine als Ersatz für z.B. SaveToFile/LoadFromFile erstellen, welche vorher beim speichern deiner Daten diese zunächst mit zLib komprimiert und beim Laden entpackt.
Die Zip Funktionen, welche bei Delphi mitgeliefert wird, sollte dafür problemlos ausreichen.

Zusätzlich kann dann niemand (Kunde) an den Daten leicht was Ändern, da er beim öffnen der z.B. Texte-Datei nur Zeichensalat (gezippte Texte) vor sich hat.
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#13

AW: F2046 Zu wenig Arbeitsspeicher (Delphi)

  Alt 8. Nov 2015, 13:12
[OT]

Seit gefühlt 20 Jahren lässt man die größer der Auslagerungsdatei automatisch von Windows bestimmen. Nur in Spezialfällen stellt man selbst einen Wert ein.
Dem kann ich nicht zustimmen. Es ist immer zu bevorzugen, der Auslagerungsdatei eine feste Größe zu geben. Dadurch gibt es - wenn eh schon ausgelagert werden muss - keine Fragmentierung durch die nicht-dynamische Größe, was die Zugriffsgeschwindigkeit nochmals drastisch reduzieren würde. Außerdem legt Windows immer eine Mindestgröße von vom 1,5-fachen des RAM fest - macht nicht so richtig Sinn, bei 8 GiB RAM 12 GiB Swap zu haben, oder?

[/OT]

MfG Dalai
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.198 Beiträge
 
Delphi 10.4 Sydney
 
#14

AW: F2046 Zu wenig Arbeitsspeicher (Delphi)

  Alt 8. Nov 2015, 13:29
[OT]

Seit gefühlt 20 Jahren lässt man die größer der Auslagerungsdatei automatisch von Windows bestimmen. Nur in Spezialfällen stellt man selbst einen Wert ein.
Dem kann ich nicht zustimmen. Es ist immer zu bevorzugen, der Auslagerungsdatei eine feste Größe zu geben. Dadurch gibt es - wenn eh schon ausgelagert werden muss - keine Fragmentierung durch die nicht-dynamische Größe, was die Zugriffsgeschwindigkeit nochmals drastisch reduzieren würde. Außerdem legt Windows immer eine Mindestgröße von vom 1,5-fachen des RAM fest - macht nicht so richtig Sinn, bei 8 GiB RAM 12 GiB Swap zu haben, oder?

[/OT]

MfG Dalai
So. Dann erklär mir doch mal genau wie bei meiner SSD die Fragmentierung zu höherer Performance führt?
Wie soll diese Defragmentieren dazu führen das der SSD-Controller die Daten schneller bekommt?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#15

AW: F2046 Zu wenig Arbeitsspeicher (Delphi)

  Alt 8. Nov 2015, 14:36
[OT]

So. Dann erklär mir doch mal genau wie bei meiner SSD die Fragmentierung zu höherer Performance führt?
Wie soll diese Defragmentieren dazu führen das der SSD-Controller die Daten schneller bekommt?
Bei SSDs spielt die Fragmentierung keine Rolle, wohl aber der verfügbare Speicherplatz, so dass auch dort anzuraten ist, eine feste Größe zu benutzen. Es ging übrigens gar nicht um Defragmentierung (Swap lässt sich mit Bordmitteln eh nicht verarzten) sondern um das Vermeiden von Fragmentierung durch dynamische Größe.

[/OT]

MfG Dalai
  Mit Zitat antworten Zitat
Sel2012

Registriert seit: 6. Jun 2015
Ort: 31535
103 Beiträge
 
Delphi XE5 Professional
 
#16

AW: F2046 Zu wenig Arbeitsspeicher (Delphi)

  Alt 10. Nov 2015, 08:46
[QUOTE=HolgerX;1320866][QUOTE=Sel2012;1320838]
...
Somit besteht dein Projekt dann aus einer (kleinen) Exe und 3 weiteren Dateien.
...
Jetzt muss ich nur noch das Geheimnis lüften, wie die App die ausgelagerten Dateien(ordner) anlegt. Das Endprodukt muss wohl res/ sein. Siehe z.B. http://developer.android.com/guide/t...resources.html
Mit MkDir allein komme ich auch nicht weiter.
Kann mir jemand bitte den Code nennen?
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
971 Beiträge
 
Delphi 6 Professional
 
#17

AW: F2046 Zu wenig Arbeitsspeicher (Delphi)

  Alt 10. Nov 2015, 09:19
OK..

Du brauchst einmal ein Tool, welches Dir die Dateien (auf deinem Entwicklungsrechner) erstellt und dann deine auszuliefernde App, welche die Daten nach dem gleichen Basis-Prinzip wieder einliest.

Zitat:
raw/
Arbitrary files to save in their raw form. To open these resources with a raw InputStream, call Resources.openRawResource() with the resource ID, which is R.raw.filename.

However, if you need access to original file names and file hierarchy, you might consider saving some resources in the assets/ directory (instead of res/raw/). Files in assets/ are not given a resource ID, so you can read them only using AssetManager.
http://developer.android.com/referen...etManager.html

Hier kannst Du die Dateien dann drinnen mit ausliefern. (Denke ich )
Mit dem AssetManager (gibs den unter Delphi ?) kann dann darauf als Stream of Bytes zugegriffen und somit in deine App eingelesen werden.

Im Prinzip nichts anderes als ein FileStream/MemoryStream.

(Alles nur anhand der unter den Links geschriebenen Infos. Habe noch keine Erfahrungen mit Mobile/Android)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#18

AW: F2046 Zu wenig Arbeitsspeicher (Delphi)

  Alt 12. Nov 2015, 14:28
Du brauchst einmal ein Tool, welches Dir die Dateien (auf deinem Entwicklungsrechner) erstellt und dann deine auszuliefernde App, welche die Daten nach dem gleichen Basis-Prinzip wieder einliest.
Stimmt... Das schreibt man eben mal schnell
Mit dem AssetManager (gibs den unter Delphi ?) kann dann darauf als Stream of Bytes zugegriffen und somit in deine App eingelesen werden.
Und warum soll ich diese 3 Zeiler nicht in Delphi schreiben?

Ungepackt geht es so..
Delphi-Quellcode:
var
  RS : TResourceStream;
begin
  RS := TResourceStream.Create(HInstance,'MeinBild',RT_RCDATA);
  try
    RS.SavetoFile(Path+'MeinBild.jpg');
  finally
    RS.Free;
  end;
end;
Dann noch eine Bild.RC erzeugen mit folgendem Inhalt:

Meinbild RCDATA ".\MeinBild.jpg"

Geändert von Mavarik (12. Nov 2015 um 14:33 Uhr)
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
971 Beiträge
 
Delphi 6 Professional
 
#19

AW: F2046 Zu wenig Arbeitsspeicher (Delphi)

  Alt 12. Nov 2015, 15:08
Mein Vorschlag ging darum, die Texte, Bilder, MP3s.. in separate Dateien auszulagern und dann zur Laufzeit nach zu laden.

Damit die (auszuliefernde) App bereits die Dateien mitbringt, müssen diese ja erstmal mit einem Tool erstellt werden.

Dieses Tool ist klar ein selbst geschriebenes Tool mit Delphi.

Alternativ können alle Texte, Bitmaps und Sounddateien auch in eine z.B. SQLLite DB gepackt und mit ausliefert werden.

Ob hierfür eine Datenbank notwendig ist... ?

Mit dem Tool werden die Dateien einfach in einen File-Stream der Reihe nach gespeichert (mit vorangestellter Dateigröße) und dann von seiner App per z.B. AssetManager in der gleichen Reihenfolge wieder aus dessen Byte-Stream gelesen.

Somit ist eben nicht alles in einer dicken App, sondern es können neue Texte/Bilder.. durch einfaches Austauschen seiner (externen) Files aktualisiert werden, ohne die App neu zu compilieren um die Ressourcen einzufügen.

(So war es jedenfalls unter Windows mit den .res Dateien, wenn sich an denen etwas verändert hat)

Wie das genau unter Mobile funktioniert, kann ich nicht sagen, da ich in dieser Richtung noch nicht entwickelt habe.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#20

AW: F2046 Zu wenig Arbeitsspeicher (Delphi)

  Alt 12. Nov 2015, 16:04
Wie das genau unter Mobile funktioniert, kann ich nicht sagen, da ich in dieser Richtung noch nicht entwickelt habe.
Datenbank kann man machen muss man aber nicht.

Ich nehme immer gerne alles in die Exe als gepackte Resource... Dann funktioniert es gleich unter Windows und mobile.

Ansonsten kann man für die mobilen Plattformen natürlich in apk/ipa auch externe Dateien mitliefern...

Da kann man natürlich dann einfach alle Dateien angeben und schwupp liegen die auf dem Device...
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 04:43 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