关于纹理计数问题 求版主解答

事情是这样的,内存使用情况我是从任务管理器看的

一进入游戏是: 70M

然后我在update里面加了一个静态变量, 每帧加+1,再=1000的时候释放

释放前的峰值是: 220M

执行 Director::getInstance()->getRunningScene()->removeAllChildrenWithCleanup(true);

然后 TextureCache::getInstance()->removeAllTextures();

这时候降到了: 160M… 我想知道那90M的纹理被谁引用了(我们 armature cocostuio,其他的问题应该不大)

然后我改了下源码

void TextureCache::removeUnusedTextures()
{
for( auto it=_textures.cbegin(); it!=_textures.cend(); /* nothing */) {
Texture2D *tex = it->second;
if( tex->getReferenceCount() == 1 ) {
CCLOG(“cocos2d: TextureCache: removing unused texture: %s”, it->first.c_str());

        tex->release();
        _textures.erase(it++);
    } else {
    tex->release();//添加了这句
        ++it;
    }
}

}

然后把 removeAllTextures(); 的地方换成了循环执行了1000次

这时候的内存:70M

证明了纹理没释放所造成的内存问题。。。希望版主解答一下

Director::getInstance()->getRunningScene()->runAction(Sequence::create(DelayTime::create(0.5),CallFunc::create(](){
Director::getInstance()->getTextureCache()->removeUnusedTextures();
string info=Director::getInstance()->getTextureCache()->getCachedTextureInfo();
CCLOG("%s",info.c_str());
}),nullptr));

刚才加里上面这句话输出了一下纹理看了下计数。

除了我主动retain的常用界面,基本上全是armature。锁用到的大图。

计数 10-40不等。不知道是我的问题还是cocos的问题,大家有没有遇到过

刚刚手机居然没回上,来顶步兵哥:2: