Alle Fragen von einem PROFI an einen SUPER PROFI - 1. - Seite 29

 
sergeev:

Wenn ein Handle geschlossen wird, wird der Speicher (der über den in CreateFileMapping angegebenen Speicherplatz hinaus zugewiesen wurde) nicht wieder zurückgegeben?
Es ist frei geworden. Aber es ist am Ende. Wir müssen zur Laufzeit Speicherplatz sparen.
 
am Ende von was? dem Ende des Gewinns oder dem Abschluss einer Handvoll oder dem Abschluss einer Anwendung?
 
sergeev:
am Ende von was? dem Ende des Gewinns oder dem Abschluss einer Handvoll oder dem Abschluss einer Anwendung?
Sie können zwischen beiden wählen. Aber es ist das Ende.
 
ah, nun, wenn es den Header schließt, dann glaube ich nicht, dass es ein Speicherleck gibt, es ist der normale Weg für Windows, Speicher freizugeben, wenn ein Header gelöscht wird
 

Es ist in gewisser Weise falsch, im laufenden Betrieb Speicher freizugeben, indem man den Deskriptor schließt.

Der Speicher sollte ohne die Hoffnung auf Windos befreit werden.

 
Alles, was Sie zugewiesen haben, haben Sie gelöscht. MSDN für Mapping sagt nichts über das manuelle Freigeben von Speicher vor dem Schließen des Handlers
 
sergeev:
Alles, was Sie zugewiesen haben, haben Sie gelöscht. MSDN für Mapping sagt nichts über das manuelle Freigeben von Speicher vor dem Schließen des Handlers
Nun, ich meine nicht nach dem Schließen des Griffs. Bei der Arbeit mit dem Speicher müssen wir dessen Größe dynamisch ändern. Aber Sie müssen das nicht ständig tun. Ständige Neuzuweisungen brauchen Zeit.
 

Vadim, was genau analysieren wir?

Ich habe zwei Möglichkeiten gefunden, den Speicher zu erweitern. Glauben Sie, dass es in beiden Fällen Probleme mit Speicherlecks geben wird?

 

Wenn alle Deskriptoren geschlossen sind, gibt es keine Lecks. Von Leakage spricht man, wenn ein Programm entladen wird, aber Ressourcen belegt bleiben.

Es kann jedoch zu Problemen mit übermäßigem Speicherverbrauch kommen. Ich hatte vor nicht allzu langer Zeit selbst solche Probleme. Ich habe die falsche Klasse für die Arbeit mit Zeitreihen verbunden. Ich habe eine Klasse hinzugefügt, die Ticks nach Sekunden indiziert. Ich habe mit dieser Klasse begonnen, um mit monatlichen Balken zu arbeiten. Es hat den gesamten Speicher in 30 Sekunden verbraucht. Dies ist eine der möglichen Varianten. Wir sollten diese Art von Dingen überwachen und vor ihnen warnen.

Der zweite Fall ist, wenn das Programm viel Speicherplatz benötigt, z. B. 1000 MB, aber nicht für eine lange Zeit. Wenn Sie es nicht freigeben, werden die anderen Programme 1000 MB weniger haben, bis Ihr Programm entladen ist.

Kurz gesagt, Sie müssen den Ressourcenverbrauch im Auge behalten.

 
OK. Ich werde das in Betracht ziehen.