【发布时间】:2010-09-08 12:49:40
【问题描述】:
我遇到了一个非常奇怪的问题。当我在 D3D 中创建一些非常简单的 VertexBuffer 和 IndexBuffer 时,TaskManager 报告的内存消耗非常大。
我通过 D3D CreateIndexBuffer 方法创建了 60000 个索引缓冲区。每个索引缓冲区包含 6 个索引 (int),代表两个三角形。因此,一个索引缓冲区将占用 24 个字节。总内存消耗为 24*60000 = 1,440,000。但是任务管理器显示应用程序增加了 300MB 内存!
我不知道 D3D9 是如何在内部进行内存分配的,但是这个问题也发生在 D3D10 中。这是因为内存碎片吗?
这是x86|bebug下的版本,d3d是release版本,windows 7。
【问题讨论】:
-
索引缓冲区!= 数组。此外,每个内存分配通常有大约 16 个字节的开销。
-
您使用的是动态索引缓冲区吗? (地图/取消地图)。参考设备是否会产生相同级别的内存消耗?
-
它在只读的托管池中。
标签: c++ windows graphics direct3d