flash as3为什么在更改对象的alpha值时会有内存增益?

flash as3为什么在更改对象的alpha值时会有内存增益?,flash,actionscript-3,memory,Flash,Actionscript 3,Memory,对于我正在制作的元素周期表工具,我加入了一种效果,每当我将鼠标悬停在元素上时,它都会改变alpha值(相当标准) 当我在元素上盘旋时,我注意到记忆中有一个神秘的增益;使用SYSTEM.TOTAL_内存-当我将鼠标悬停在某个元素上时,内存使用量会增加约0.005MB,而当我将鼠标移开时,内存使用量不会减少。然而,如果我再次移动鼠标,就不会有第二次内存增加 通过注释掉函数的一些部分,我注意到是alpha变化导致了这一点-下面是代码: addEventListener(MouseEvent.MOUSE

对于我正在制作的元素周期表工具,我加入了一种效果,每当我将鼠标悬停在元素上时,它都会改变alpha值(相当标准)

当我在元素上盘旋时,我注意到记忆中有一个神秘的增益;使用SYSTEM.TOTAL_内存-当我将鼠标悬停在某个元素上时,内存使用量会增加约0.005MB,而当我将鼠标移开时,内存使用量不会减少。然而,如果我再次移动鼠标,就不会有第二次内存增加

通过注释掉函数的一些部分,我注意到是alpha变化导致了这一点-下面是代码:

addEventListener(MouseEvent.MOUSE_OVER,highlightthis);
addEventListener(MouseEvent.MOUSE_OUT,dehighlight);

function highlightthis(evt:MouseEvent):void
{
    if (evt.target is Element)
        evt.target.alpha = 0.5;

}

function dehighlight(evt:MouseEvent):void
{
    if (evt.target is Element)
        evt.target.alpha = 1;
}
有人知道当alpha值改变时为什么会出现这种内存增益吗?奇怪的是,为什么它只发生一次


一些额外的信息:我的元素类是一个MovieClip,包含两个文本字段、基本变量和一个MovieClip。它已将mouseChildren属性设置为false(buttonMode属性设置为true)。

这可能是一个暗中操作,我不知道原因,但可以尝试猜测。透明度要求知道背景的颜色,此外,为了显示透明度,每个像素需要多一个字节的信息(在位图数据中)(即增加33%的RGB->ARGB)。因此,一旦玩家知道纯色,就不必保存不可见的背景,一旦背景变为可见,它自然需要更多的内存来保存颜色信息。一旦发生这种情况,它要么缓存该信息,要么你根本就没有等到GC循环。

这可能是一个暗中操作,我不知道原因,但可以尝试猜测。透明度要求知道背景的颜色,此外,为了显示透明度,每个像素需要多一个字节的信息(在位图数据中)(即增加33%的RGB->ARGB)。因此,一旦玩家知道纯色,就不必保存不可见的背景,一旦背景变为可见,它自然需要更多的内存来保存颜色信息。一旦发生这种情况,它要么缓存该信息,要么干脆不等到GC循环。

我认为应用alpha合成需要更多内存并不奇怪。如果有人感兴趣,只需更新一下即可。。。我玩了我的元素对象(alpha值正在变化的东西),并尝试取出一些文本字段等。当它只是一个MovieClip时,并没有任何内存增益;事实证明,正是这些文本字段导致了内存的增加——更改这些内容的alpha值需要更多内存!我查看了AdobeDocumentationforTextField,结果发现它没有.alpha属性。我也在网上搜索过,显然要更改它们的alpha值,需要使用blendMode属性,引用blendMode.LAYER,我认为这需要更多内存。这一定是Flash在后台所做的。我认为应用alpha合成需要更多内存并不奇怪。如果有人感兴趣,只需更新一下。。。我玩了我的元素对象(alpha值正在变化的东西),并尝试取出一些文本字段等。当它只是一个MovieClip时,并没有任何内存增益;事实证明,正是这些文本字段导致了内存的增加——更改这些内容的alpha值需要更多内存!我查看了AdobeDocumentationforTextField,结果发现它没有.alpha属性。我也在网上搜索过,显然要更改它们的alpha值,需要使用blendMode属性,引用blendMode.LAYER,我认为这需要更多内存。这一定是Flash在后台所做的。我猜这是因为必须在后台创建一个ColorTransform实例。类似这样的东西-alpha需要混合,这需要更多的资源。鼠标移出时内存不会被放弃,因为gc只有在您请求内存时才会运行,并且只有在需要时才会运行。我一直在等待gc,内存不会被放弃,所以我想这是有道理的。。。粗略地说,更改alpha值是将对象永久性地转换为需要更多内存的对象。我想这没什么大不了的,因为这不是内存泄漏——我只是好奇它背后的解释。我会多玩玩它一点;我会让element类简单一点,或者简单地尝试使用MovieClip,看看是否得到相同的结果,然后在这里发布。我猜这是因为必须在幕后创建ColorTransform实例。类似这样的东西-alpha需要混合,这需要更多的资源。鼠标移出时内存不会被放弃,因为gc只有在您请求内存时才会运行,并且只有在需要时才会运行。我一直在等待gc,内存不会被放弃,所以我想这是有道理的。。。粗略地说,更改alpha值是将对象永久性地转换为需要更多内存的对象。我想这没什么大不了的,因为这不是内存泄漏——我只是好奇它背后的解释。我会多玩玩它一点;我将使element类更简单,或者简单地尝试使用MovieClip来实现它,看看是否得到相同的结果,然后在这里发布。