游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1981|回复: 4

为什么DX9频繁创建纹理,会无缘无故多出内存??

[复制链接]

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
发表于 2010-11-10 01:06:00 | 显示全部楼层 |阅读模式
起初:我让这个测试程序只渲染一个纹理,子线程则不停的销毁这个纹理,并重新创建纹理给他。
测试的结果:内存占用没有问题,一直稳定。

然后,我改成了一下渲染5个纹理,线程也是跟着不停的销毁这5个,并重新创建5个。

在线程里,为了观察清楚,我特意设置按下A键后,再让它执行创建和销毁这一过程。
结果测试后,果然如我所料,A键一按下,马上内存占用就多出了1M。

PS;
1:以上纹理尺寸均为320×240
2:起初只渲染1个纹理的时候,内存也是增加了,只是1个纹理多出的内存很少,不容易看出来。

看来真的是DX9的问题。。
那什么原因?有何解决办法?有没有朋友了解这个问题?

1

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2010-11-12 13:29:00 | 显示全部楼层

Re:为什么DX9频繁创建纹理,会无缘无故多出内存??

PS;
1:以上纹理尺寸均为320×240
-------------------------------
大小不满足2次幂的时候,创建的纹理所占的内存会以2次幂的形式存取
多出来的部分,就是增加的内存。

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
 楼主| 发表于 2010-11-12 14:19:00 | 显示全部楼层

Re: Re:为什么DX9频繁创建纹理,会无缘无故多出内存??

hevinci: Re:为什么DX9频繁创建纹理,会无缘无故多出内存??

PS;
1:以上纹理尺寸均为320×240
-------------------------------
大小不满足2次幂的时候,创建的...



1:我未使用纹理过滤:
D3DXCreateTextureFromFileEx(m_pD3DDevice, "Media\\孔庙_01.jpg",
                info.Width,
                info.Height,
                D3DFMT_FROM_FILE,
                0,
                D3DFMT_A8R8G8B8,
                D3DPOOL_MANAGED,
                D3DX_FILTER_NONE,
                D3DX_DEFAULT,
                0,
                NULL,
                NULL,
                &m_pTextures[3]);

2:即便是这个原因,为什么程序刚运行时内存不多出来,而是在创建和销毁有了一定次数之后才会多出一些内存?
说简单点,比如我每次销毁当前渲染的5个纹理,然后创建新的5个纹理,假如他们一共占了10M的内存,那让他频繁去执行这么一个过程:创建5个,销毁5个、创建5个,销毁5个……内存应该永远都是10M吧,你这种解释说不过去吧?
因为既然每创建纹理都要多出那些内存,那程序所占的内存从开始到结束永远是恒定的,不可能有变化。而我问的恰恰就是为何会突然多出内存。

显然“多出来的部分,就是增加的内存”在逻辑上经不起推敲。

1

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2010-11-17 09:18:00 | 显示全部楼层

Re:为什么DX9频繁创建纹理,会无缘无故多出内存??

没有看到你的源代码
如果内存一直递增的增加,说明有内存泄漏。
如果内存能够保持在波动的范围内,正常,可能是由于纹理销毁时,产生的碎片造成的。
我的游戏也是有类似的情况,但是会保持在波动的范围内。而且在程序推出时也并未发现内存泄漏现象。故不用担心。如果非要打破沙锅问到底,那么就去好好研究WINDOWS核心编程

32

主题

1259

帖子

1351

积分

金牌会员

Rank: 6Rank: 6

积分
1351
发表于 2010-11-17 13:38:00 | 显示全部楼层

Re:为什么DX9频繁创建纹理,会无缘无故多出内存??

D3D有pool在管理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-5-30 12:07

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表