DirectX in Projekt verwenden - Arbeitsspeicherauslastung des Programms

  • C++

    DirectX in Projekt verwenden - Arbeitsspeicherauslastung des Programms

    Guten Abend zusammen,

    ich habe angefangen, mich mit DirectX zu beschäftigen und nun meine ersten Rechtecke und Dreiecke auf ein MDI-Window projiziert. Ich arbeite im Low-Level-Bereich, weshalb das Aufräumen natürlich vom Programmierer selbst erledigt werden muss. Der Großteil der Arbeit wird mir durch den std::shared_ptr abgenommen.
    Bei den ganzen COM-Funktionen, auf die man da beim Arbeiten mit Device, DeviceContext oder SwapChain zugreift, bin ich mir nun nicht so sicher, wie man da aufräumen soll. Prinzipiell ist es ja immer wichtig, dass man die Funktion ->Release() aufruft. Auch diese Arbeit lasse ich durch den ComPtr machen, der im <wrl.h> Header zu finden und im Namespace Microsoft::WRL versteckt ist. Sämtliche COM-Pointer sind darin eingebettet, sodass ich doch eigentlich keine "Aufräumarbeiten" mehr durchzuführen habe.

    Was mir nun aufgefallen ist ist, dass im Task-Manager die Arbeitsspeicherauslastung des Programm immer um einige KB nach oben geht, sobald ich das MDI-Fenster mehrmals in der Größe verändere (wodurch die Zeichnung (Rechteck oder Dreieck) neu erstellt wird). Ich glaube aber nicht und ich habe wirklich gründlich gesucht, dass ich da irgendwelche Pointer zurück lasse. Kann es sein, dass DirectX an sich einfach immer etwas Speicher allokiert und den dann nach einiger Zeit, wenn er nicht mehr gebraucht wird, wieder deallokiert?

    Eine andere Sache wäre, dass nach dem Löschen sämtlicher Pointer, die mit den DirectX-Arbeiten zutun hatten und ich halt auch die Zeichnungen vom MDI-Fenster entfernen möchte, die Arbeitsspeicherauslastung meines Programms deutlich höher ist, als es das zu Beginn war. Das kann ich ja dadurch erkennen, dass bevor ich irgendeine DirectX Funktion aufrufe, per Haltepunkt herausfinde, wie die Auslastung zu dem Zeitpunkt war. Ich würde schätzen, dass sie um das Dreifache höher liegt, wie nachdem ich sämtliche DirectX-Pointer ordnungsgemäß gelöscht/löschen lassen habe.

    Liegt es nun in der Sache der "Betriebssystem-Natur", dass die Arbeitsspeicherauslastung nach dem Arbeiten mit einer solch großen Bibliothek wie der d3d11.dll erst einmal höher bleibt? Ich kann mir das wirklich nicht erklären. Oder die DLL ist noch irgendwie geladen, aber das halte ich für unwahrscheinlich. Die d3d11.lib habe ich über die Linker-Eingabe "eingebettet".

    P.S.: Mir ist gerade in der Debug-Ausgabebox des Visual Studios folgender Eintrag aufgefallen: "D3D11: Removing Device.". Die Arbeitsspeicherauslastung bleibt aber um das dreifache höher als zu dem Zeitpunkt, wo sämtliche D3D11-Objekte noch nicht aufgerufen/geladen wurden.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „rwCapt“ ()