Ich habe ein Programm, das Dateien konvertiert. Es nimmt einen Eingabedateinamen und einen Ausgabedateinamen, liest aus der einen und schreibt in die andere, mit einigen Änderungen. Ich habe den Quellcode, aber er ist sehr umfangreich, und ich habe kein klares Bild von seiner Funktionsweise. Ich kann sagen, daß die Dateien mit _wsopen_s im Schreib-Lese-Modus (_O_RDWR) geöffnet werden, und es scheint beim Öffnen keine komischen Vorgänge zu geben.
Aus irgendeinem Grund passiert Folgendes, wenn ich versuche, dieses Programm mit einer bestimmten großen Eingabedatei zu verwenden. Zunächst steigen der physische Speicherverbrauch und der für den Dateisystem-Cache verwendete Speicher (wie vom Task-Manager gemeldet) an. Es scheint, dass für jedes gelesene und geschriebene Byte der Speicherverbrauch um 2 Byte ansteigt. Beachten Sie, dass dies der Speicher ist, der dem Betriebssystem : Die Commit-Größe und die Größe der Arbeitsmenge der eigentlichen ausführbaren Datei bleiben konstant.
Wenn sich dann die Größe des Dateisystem-Caches dem gesamten verfügbaren Speicher nähert, beginnt das Betriebssystem, laufende Programme in die Auslagerungsdatei auszulagern, und schließlich reagiert das System nicht mehr.
Die Autoren des Programms sagen, dass sie diese Art von Verhalten noch nie gesehen haben und sie wissen nicht, warum dies der Fall sein könnte.
Bevor ich das offiziell als Fehler melde und versuche, dass sie ihn beheben (was lange dauern kann, und ich brauche das Programm jetzt):
- Gibt es irgendetwas im Quellcode, nach dem ich suchen kann, eine Art hinterhältiger Funktionsaufruf, der dieses Verhalten auslösen könnte?
- Kann ich dem Betriebssystem sagen, dass es das nicht tun soll?
- Und, ganz allgemein, was soll's?
Dies geschieht auf x64 Vista Home Premium SP2.