![]() |
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... |
AW: Nicht genügend Arbeitsspeicher Win XP vs Win 7
Ist die BDE ablösen eine Alternative für dich?
|
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. |
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. |
AW: Nicht genügend Arbeitsspeicher Win XP vs Win 7
Zitat:
Zitat:
Zitat:
Zitat:
Danke schon mal... |
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.
|
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!
|
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 ;) |
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:
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
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. ![]() @Mods: Ja, ich hab absichtlich [CODE] verwendet, wehe ihr editiert das ... bitte repariert endlich mal das Delphi-Tag. |
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. |
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