我遇到了一个很奇怪的问题。当我在 D3D 中创建一些非常简单的 VertexBuffer 和 IndexBuffer 时,TaskManager 报告的内存消耗很大。
我通过 D3D CreateIndexBuffer 方法创建了 60000 个索引缓冲区。每个索引缓冲区包含 6 个索引(int),代表两个三角形。因此,一个索引缓冲区将占用 24 个字节。总内存消耗为 24*60000 = 1,440,000。但是任务管理器显示应用程序内存增加了 300MB!
我不知道 D3D9 是如何在内部进行内存分配的,但这个问题也发生在 D3D10 中。这是因为内存碎片吗?
这是x86|bebug下的版本,d3d是release版本,windows 7。
最佳答案
60000 个索引缓冲区?为什么不只创建 1 个大索引缓冲区?切换所有这些索引缓冲区本身会很慢。
关于原因:您创建的每个索引缓冲区都会有开销(各种跟踪信息和驱动程序将用来优化它的信息位)并且 5K 内存对我来说似乎很合理. 5K * 60000 大约是 300 兆...
关于c++ - 创建多个顶点和索引缓冲区时会消耗大量内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3667879/