2017-01-07 2 views
0

Je veux écrire une application de test pour tester la vitesse d'écriture de la mémoire système vers la mémoire GPU à l'aide de DirectX API. Mais même si je crée simplement Buffer et libère dans une boucle for, les outils de diagnostic mémoire montrent que la taille des octets privés du processus augmente constamment. Je pense que cela pourrait être parce que la mémoire système mappée GPU n'est jamais libérée. BTW, la taille du tas est stable.Fuites de mémoire DirectX CreateBuffer

1. FOR 1000 iteration 
2. CreateBuffer using 
       D3D11_USAGE_STAGING/D3D11_USAGE_DYNAMIC 
       & D3D11_CPU_ACCESS_WRITE 
3. d3dbuffer.Release & d3dbuffer = nullptr 

Y at-il quelqu'un qui pourrait expliquer comment le libérer correctement? Est-ce que c'est ce que l'on appelle la mémoire AGP mappée?

Répondre

1

Direct3D utilise la destruction retardée des ressources. Si vous souhaitez forcer le nettoyage de toutes les ressources, vous devez appeler le Flush. Rédaction de benchmarks Direct3D efficace est assez difficile car il y a beaucoup de choses en jeu, vous êtes probablement manquant.

Pour un certain sens de cela, lisez Accurately Profiling Direct3D API Calls et voir Profiling DirectX Apps

+0

Merci Chuck. pour chaque itération, j'appelle flush et et interroge le signal vide du tampon de commande. Mais lorsque j'utilise les outils de diagnostic de Visual Studio 2015 pour vérifier l'utilisation de la mémoire, il continue d'augmenter et ne diminue jamais. L'application va planter lorsque la mémoire du système est épuisée. L'article explique très bien sur le profilage des coûts API, mais ne couvre pas assez d'informations sur la gestion de la mémoire. D'autres idées pour limiter la taille du tampon? Merci beaucoup! – shorttermmem

+0

J'ai également utilisé ID3D11Debug et debug device pour vérifier qu'aucun objet d3d n'a été divulgué. Le tas est stable. Mais les octets privés continuent à augmenter par quelques itérations. Finalement, l'application se bloque lors de l'exécution de la mémoire disponible de 16 Go. – shorttermmem