Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Betriebssysteme (https://www.delphipraxis.net/27-betriebssysteme/)
-   -   Nicht genügend Arbeitsspeicher Win XP vs Win 7 (https://www.delphipraxis.net/154321-nicht-genuegend-arbeitsspeicher-win-xp-vs-win-7-a.html)

ibp 6. Sep 2010 16:15

Nicht genügend Arbeitsspeicher Win XP vs Win 7
 
Hi,

uns fehlt eine Idee zu einem Problem, vielleicht hat ja jemand einen Wink.

Problem: Die Applikation läuft auf einem Win XP Rechner mit 768 MB und einem Win 7 mit 4 GB. Das Programm arbeitet mit der BDE und Interbase zusammen, jeweils auf beiden Rechnern mit den gleichen Versionen und Konstellationen.
Man kann mittels einer Export - Import Datei Daten auf andere Datenbanken portieren. So weit so gut, hat bisher immer super geklappt.
Nun aber das: Wenn ich die eine große Exportdatei mit dem XP-Rechner importiere, dann klappt alles. Wenn ich das mit dem Win 7 Rechner mache, dann steigt er nach einiger Zeit aus mit der Meldung "zu wenig Arbeitsspeicher". Ja der Vergleich hinkt aber der Win 7 Rechner hat ca. das 5-Fache an Speicher wie der alte XP-Rechner.

Wo kann ich da ansetzen?

Danke schon mal...

generic 6. Sep 2010 16:31

AW: Nicht genügend Arbeitsspeicher Win XP vs Win 7
 
Ist die BDE ablösen eine Alternative für dich?

himitsu 6. Sep 2010 16:34

AW: Nicht genügend Arbeitsspeicher Win XP vs Win 7
 
Es kann sein, daß im Win7 mehr/größere DLLs und Daten im Speicher der Anwendung (oder Datenbank) eingebunden werden und daß daher nun der virtuelle Speicher, welcher vorher im XP grade noch so ausreichte, im Win7 nun zu voll ist.
Du könntest mal sehn, wenn du bei deinem Programm die 3GB-Option aktivierst.

Eventuell mal schauen wie voll der virtuelle Speicher jeweils ist.

Luckie 6. Sep 2010 16:44

AW: Nicht genügend Arbeitsspeicher Win XP vs Win 7
 
Das ist Unsinn. Unter 32-Bit stehen jedem Programm 4GB Adressraum zur Verfügung, wobei die Hälfte vom Betriebssystem belegt wird. Es ist daher unerheblich, wie groß der tatsächliche physikalische Speicher ist, da wir hier von virtuellen Speicher reden. Eine Rolle aber spielt die Größe der Auslagerungsdatei. Es kann sein, dass diese zu klein ist und Windows keinen virtuellen Speicher mehr zur Verfügung stellen kann. Wenn man daran aber nichts geändert hat, sollte es da auch keine Probleme geben. Ich kann mir nur vorstellen, dass Windows 7 empfindlicher auf Speicherlecks reagiert. Der Arbeitsspeicher also zum Beispiel zu stark fragmentiert ist und Windows keinen benötigten zusammenhängenden Speicher mehr zur Verfügung stellen kann. Deswegen wie forderst du Speicher an und gibst du ihn auch immer wieder frei?


Wie das mit dem Speicher unter 64-Bit aussieht kann ich allerdings nicht sagen.

ibp 6. Sep 2010 17:21

AW: Nicht genügend Arbeitsspeicher Win XP vs Win 7
 
Zitat:

Zitat von generic (Beitrag 1047839)
Ist die BDE ablösen eine Alternative für dich?

BDE wird abgelöst werden, spielt aber denke ich hier keine Rolle und ich will keine "wie kann man nur noch mit der BDE arbeiten"-Diskussion.

Zitat:

Zitat von Luckie (Beitrag 1047843)
Eine Rolle aber spielt die Größe der Auslagerungsdatei. Es kann sein, dass diese zu klein ist und Windows keinen virtuellen Speicher mehr zur Verfügung stellen kann. Wenn man daran aber nichts geändert hat, sollte es da auch keine Probleme geben.

Das werde ich mal abfragen...

Zitat:

Zitat von Luckie (Beitrag 1047843)
Ich kann mir nur vorstellen, dass Windows 7 empfindlicher auf Speicherlecks reagiert. Der Arbeitsspeicher also zum Beispiel zu stark fragmentiert ist und Windows keinen benötigten zusammenhängenden Speicher mehr zur Verfügung stellen kann. Deswegen wie forderst du Speicher an und gibst du ihn auch immer wieder frei?

Das könnte ein Hinweis sein, da in dieser Programmversion (uralt!) in dieser Funktion einige Lecks vorhanden waren

Zitat:

Zitat von Luckie (Beitrag 1047843)
Wie das mit dem Speicher unter 64-Bit aussieht kann ich allerdings nicht sagen.

..hier bisher nicht relevant.

Danke schon mal...

Bernhard Geyer 6. Sep 2010 17:51

AW: Nicht genügend Arbeitsspeicher Win XP vs Win 7
 
Verwende mal FastMM in deinem Programm. Ich könnte mir vorstellen das hier auch die Framentierung des alten Speichermanagers zuschlägt.

kschit 7. Sep 2010 05:59

AW: Nicht genügend Arbeitsspeicher Win XP vs Win 7
 
Gibt's schon was neues? Habe ähnliche Probleme. Allerdings hab ich einen Teil in eine DLL ausgelagert. Verwende bereits die FastMM neueste Version. Unter Windows XP kein Problem, unter Windows 7 schmiert das Teil ab. Könnte auch an dem blöden Quickreport liegen, dass der zusätzlich noch irgendwelche Speicherleaks hat, die unter Windows 7 zuschlagen. Auf jedenfall würde ich mich sehr freuen, wenn Du Dein Ergebnis hier nochmal posten könntest. Danke!

hoika 7. Sep 2010 08:03

AW: Nicht genügend Arbeitsspeicher Win XP vs Win 7
 
Hallo,

bei der BDE solltest du explizit Prepare/UnPrepare bei den Queries benutzen (es gab da mal nen Mem-Leak).
Ausserdem explizite Transaktionen (StartTransaction/Commit) benutzen,
und alle x Datensätze /(z.B. alle 1000) ein Commit machen.
Dass das dann nicht in einer Transaktion läuft, tja ...


Heiko

So 4000 ist erreicht ;)

himitsu 7. Sep 2010 08:37

AW: Nicht genügend Arbeitsspeicher Win XP vs Win 7
 
Wenn ihr dieses in euer Programm einbaut, was zeigt denn dieses jeweils im XP/7 an?
Delphi-Quellcode:
var GMS: TMemoryStatusEx;

GMS.dwLength := SizeOf(TMemoryStatusEx);
GlobalMemoryStatusEx(GMS);
Label1.Caltion := Format('%.2n MB verfügbar', [GMS.ullAvailVirtual / 1048576]);

@Luckie: Hab hier garde nur 2 GB im System verfügbar, also was zeigt denn Folgendes an?
Code:
program Project3;

{$APPTYPE CONSOLE}

uses
  Windows;

//{$SetPeFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}

var
  GMS: TMemoryStatusEx;

begin
  GMS.dwLength := SizeOf(TMemoryStatusEx);
  GlobalMemoryStatusEx(GMS);
  WriteLn('used (system):               ', GMS.dwMemoryLoad, ' %');
  WriteLn;
  WriteLn('physical memory - total:     ', GMS.ullTotalPhys     / 1048576 :4:2, ' MB');
  WriteLn(' (system)       - available: ', GMS.ullAvailPhys     / 1048576 :4:2, ' MB');
  WriteLn;
  WriteLn('page file       - total:     ', GMS.ullTotalPageFile / 1048576 :4:2, ' MB');
  WriteLn('                - available: ', GMS.ullAvailPageFile / 1048576 :4:2, ' MB');
  WriteLn;
  WriteLn('virtual memory  - total:     ', GMS.ullTotalVirtual  / 1048576 :4:2, ' MB');
  WriteLn(' (this program) - available: ', GMS.ullAvailVirtual  / 1048576 :4:2, ' MB');
  ReadLn;
end.
PS: Wer mehr als 4 GB in einem Win32-Programm nutzen will, der muß erstmal Large-Address-Aware im System aktiviert haben und sollte sich dann im MSDN mal wie AWE-Funktionen ansehn.

@Mods: Ja, ich hab absichtlich [CODE] verwendet, wehe ihr editiert das ... bitte repariert endlich mal das Delphi-Tag.

Luckie 7. Sep 2010 16:11

AW: Nicht genügend Arbeitsspeicher Win XP vs Win 7
 
Unter 32-Bit hast du nur einen Adressraum von 4 GB. Davon belegt das Betriebssystem 2 GB. Mir einem Schalter kann man den Adressraum der Anwendung auf 3 GB erhöhen. Davon ist aber abzuraten, da selbst 2 GB für das Betriebssystem schon ziemlich knapp sind.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:46 Uhr.
Seite 1 von 2  1 2      

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