Bei meinem Programm zum Kopieren von Daten schlägt das Out Of Memory Phänomen zu.
Eine kurze Ablaufbeschreibung des Programms:
Die zu kopierenden Ordner werden mit FindAllFolders aufgelistet und mit ForceDirectory erstellt.
Danach werden die Dateien in einer Listbox aufgelistet, der Pfad wohin sie kopiert werden sollen wird zurechtgeschnitten und in einer zweiten ListBox bereitgestellt.
Um unerwünschte Dateien herauszufilten werden Diese dann aus den ListBoxen gelöscht.
Jetzt fängt der Kopiervorgang an und die Dateien werden mit FileCopyEx kopiert.
3 Beispiele:
1. Es läuft ohne Probleme mit wenigen Ordnern und Dateien:
Bei mehreren Ordnern die ich hinzufüge und die nicht soviele Dateien haben zeigt mit FastMM4 folgendes an:
| Zitat: |
Diese Anwendung hat Speicher-Lecks. Die kleineren Speicher-Lecks sind (ausschließlich von Zeigern registrierte Lecks):
5 - 12 bytes: TIdThreadSafeInteger x 1
21 - 28 bytes: TIdCriticalSection x 2
|
2. Es läuft mit wenigen großen Dateien
Wenn ich wenige Dateien kopiere , die aber groß sind (etwa insgesamt 2GB ), gibt es keine Probleme, die Anzeige von FastMM4 ist wie in 1.
3. Es gibt ein Out of Memory bei vielen Ordnern und Dateien
Ich füge meinen aktuellen ProfilOdrner hinzu( 3,5GBMB. 11000 Dateien, 3100 Ordner) hinzu:
| Zitat: |
Diese Anwendung hat Speicher-Lecks. Die kleineren Speicher-Lecks sind (ausschließlich von Zeigern registrierte Lecks):
5 - 12 bytes: TIdThreadSafeInteger x 1, Unbekannt x 719
21 - 28 bytes: TIdCriticalSection x 2
501 - 548 bytes: Unbekannt x 719
Auszug aus Fast MM-Log:
Ein Speicher-Leck hat folgende Größe : 548
Stackverfolgung - Speicherpuffer wurde zugeordnet (Rückgabeadresse):
40311E
45BDC2
45F7C3
43F645
45F914
45F7C3
45EEEB
429EAA
7E368734 [Unknown function at GetDC]
7E368816 [Unknown function at GetDC]
Der Speicherpuffer wird gegenwärtig für ein Objekt der folgenden Klasse verwendet: Unbekannt
The allocation number is: 2400766
Aktueller Speicherauszug von 256 Byte, angefangen an der Zeigeradresse: 7F827D40:
82 43 3A 5C 44 6F 6B 75 6D 65 6E 74 65 20 75 6E 64 20 45 69 6E 73 74 65 6C 6C 75 6E 67 65 6E 5C
41 64 6D 69 6E 69 73 74 72 61 74 6F 72 2E 57 49 4E 44 4F 57 53 50 43 5C 41 6E 77 65 6E 64 75 6E
67 73 64 61 74 65 6E 5C 54 68 75 6E 64 65 72 62 69 72 64 5C 50 72 6F 66 69 6C 65 73 5C 78 73 32
62 6E 71 37 34 2E 64 65 66 61 75 6C 74 5C 75 72 6C 63 6C 61 73 73 69 66 69 65 72 32 2E 73 71 6C
69 74 65 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80
80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80
80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80
80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80
‚ C : \ D o k u m e n t e u n d E i n s t e l l u n g e n \
A d m i n i s t r a t o r . W I N D O W S P C \ A n w e n d u n
g s d a t e n \ T h u n d e r b i r d \ P r o f i l e s \ x s 2
b n q 7 4 . d e f a u l t \ u r l c l a s s i f i e r 2 . s q l
i t e € € € € € € € € € € € € € € € € € € € € € € € € € € € € €
€ € € € € € € € € € € € € € € € € € € € € € € € € € € € € € € €
€ € € € € € € € € € € € € € € € € € € € € € € € € € € € € € € €
€ € € € € € € € € € € € € € € € € € € € € € € € € € € € € € € €
|
Kopiert wurden im Endeffeckt nur rund 50MB von den 3,5GB.
Ich gebe noch ein paar Angaben mit die vllt helfen könnten:
Der Taskmanager zeigte mir beim Out Of Memory insgesamt (für das gesamte System) etwa 12.700 Handles an.
Mein Programm hatte etwa 1.900 Threads gestartet.
Ich würde mich über ein paar Winks mit dem Betonpfeiler sehr freuen.