|
先声明。。我用mx(6.0) 版本
1. 关于flash object
===================
请问。。
如果我instantiate 一个object..
那当我不要那个object了要怎样free 掉它??
如果reference to object set 成其它东西。。那那个原本的object是否会自动被gc 清理掉???
比如
a=new object();
b=new object();
a=b;
那原本被a 指的object还占memory吗??
以下 是我正在做着的东西
首先。。有个xml object会每分钟取一些资料。。
取了之后,会把东西塞进一个array里。。
然后我有个function会每 5 秒去process那个array..
问题是process完后,我要clear掉那个obj from我的array..
该怎么做
myXML.onLoad=function()
{
//trace(myXML.toString());
var story=myXML.firstChild.nextSibling.childNodes[1]
while (story!=null)
{
//trace(story.attributes["id"]);
//trace(story.attributes["diggs"]);
//trace(story.childNodes[1].childNodes[0]);
//trace(story.attributes["link"]);
myStory = new Object();
myStory.id = story.attributes["id"];
myStory.digg=story.attributes["diggs"];
myStory.title=story.childNodes[1].childNodes[0];
myStory.link=story.attributes["link"];
queuetail+=1;
queue[queuetail]=myStory;
story=story.nextSibling.nextSibling;
}
} //onload
我是怕说memory usage 会过高。。
所以我想要deaalocate..
function ProcessQueue()
{
if (queueTail>queueHead)
{
var myStory=queue[queueHead];
trace(myStory.id);
queue[queueHead]=null; //<--- will this help??
queueHead+=1;
}
}
[ 本帖最后由 tensaix2j 于 17-1-2008 11:00 AM 编辑 ] |
|
|
|
|
|
|
|
发表于 13-5-2007 03:11 PM
|
显示全部楼层
只要variable被定義之後就肯定會佔住記憶體, 如果覺得不必再用到的話可以使用 delete 刪掉該variable. 很容易就可以從測試中辨別
var a:Object = new Object();
a.nn = "abc";
var b:Object = new Object();
b = a;
delete a;
trace(b.nn);
trace(a);
另一問題是, 你每分鐘更新你的XML, 那麼另一個使用interval每5秒做更新XML資料, 這不是很耗CPU的計算?
應當是更新了XML之後直接呼叫你的process即可做到即時更新而不是用setInterval不斷更新. 這很容易造成CPU過量的計算 |
|
|
|
|
|
|
|

楼主 |
发表于 13-5-2007 03:24 PM
|
显示全部楼层
原帖由 super-tomato 于 13-5-2007 03:11 PM 发表
另一問題是, 你每分鐘更新你的XML, 那麼另一個使用interval每5秒做更新XML資料, 這不是很耗CPU的計算?
應當是更新了XML之後直接呼叫你的process即可做到即時更新而不是用setInterval不斷更新. 這很容易造成CPU過量的計算
.
不是的。。
因为。。我拿了一个list的story后
我要一个一个去animate。。(elapse by 5 seconds)
而不是一次过。。
process 不是更新。。是去queue里拿一个story来animate.
概念是这样
我的xml每分钟去抓story。。(不是一个而是一次很多个)
然后放进queue里
process每五秒去queue抓一个story来animate..
我想要的是animate好了之后干掉这个object from我的queue..
这是我的prototype..
my Digg Visualization
故事是这里抽的。。
http://services.digg.com/stories ... F%2Fapidoc.digg.com
[ 本帖最后由 tensaix2j 于 13-5-2007 03:45 PM 编辑 ] |
|
|
|
|
|
|
|

楼主 |
发表于 13-5-2007 03:47 PM
|
显示全部楼层
原帖由 super-tomato 于 13-5-2007 03:11 PM 发表
只要variable被定義之後就肯定會佔住記憶體
真的是这样吗?
如果没任何variable point去那一块记忆体也不会自动release吗? |
|
|
|
|
|
|
|
发表于 13-5-2007 04:03 PM
|
显示全部楼层
如果是這樣的概念, 那麼一分鐘就有60, 也就是你只有一分鐘可以處理30筆story, 如果XML所載入的資料大於 30 筆的話, 你的bug就會出現了.
我覺得應該把已經做過的story從array中pop掉, 那麼永遠只讀第一筆的情況下就可以解決問題.
AS和C++不太一樣, 沒有pointer的寫法, 所以b = a並不是指向a的記憶體位置, 但也不像JAVA會在沒用的情況下把沒用的release掉. object A只要一被定義就會暫駐記憶體的一塊位置並賦予null空值, 而真正被release的話則是undefined(即在記憶體中無定義) |
|
|
|
|
|
|
|

楼主 |
发表于 13-5-2007 04:15 PM
|
显示全部楼层
原帖由 super-tomato 于 13-5-2007 04:03 PM 发表
如果是這樣的概念, 那麼一分鐘就有60, 也就是你只有一分鐘可以處理30筆story, 如果XML所載入的資料大於 30 筆的話, 你的bug就會出現了.
我覺得應該把已經做過的story從array中pop掉, 那麼永遠只讀第一筆的情 ...
2. 关于 Queue using Array.
===========================
所以我才想到用queue 来做好象buffer
如果那次有60笔的story.. 通通先丢进queue里。。
我一次只拿一个story来process。。。
我不清楚flash有没有built in the queue..但我是用array 的。。
我是用自订义的array,然后用var queuehead 和queuetail来记住头跟尾。
[ 本帖最后由 tensaix2j 于 13-5-2007 11:00 PM 编辑 ] |
|
|
|
|
|
|
|

楼主 |
发表于 13-5-2007 04:23 PM
|
显示全部楼层
p/s:
digg那里的更新每秒上下变化无穷。
但他们只允许我们每分钟request一次。。
不听话的话直接ban ip..
www.digg.com |
|
|
|
|
|
|
|
发表于 13-5-2007 04:30 PM
|
显示全部楼层
在為了保持資料的情況下, 把xml的資料push進Array中, 然後由process這個函數把Array[0]資料更新後, 再Array.shift刪掉第一筆, 之後的第二筆就會挪到第一筆去, 這樣不斷循環, 所以只要判斷Array的長度大於0就代表有資料要進行更新, 也不用再定義 queueHead+=1; 減少任何增加記憶體的負擔量
按F1搜索Array相關函數的說明就可以了解該怎麼依需求變化 |
|
|
|
|
|
|
|
发表于 13-5-2007 04:52 PM
|
显示全部楼层
原帖由 super-tomato 于 13-5-2007 04:30 PM 发表
在為了保持資料的情況下, 把xml的資料push進Array中, 然後由process這個函數把Array資料更新後, 再Array.shift刪掉第一筆, 之後的第二筆就會挪到第一筆去, 這樣不斷循環, 所以只要判斷Array的長度大於0就代表有 ...
例子:
var myArray:Array = new Array();
//pushArray 當作是讀取外部XML, 每次增加10筆資料
function pushArray() {
for(var i=0; i<10; i++) {
var obj:Object = new Object(); //定義在function內的variable不需要特意刪除, 只要function結束, variable 自動會被destroy
obj.n = random(10);
myArray.push(obj);
}
}
//popArray 當做是更新資料
function popArray() {
if(myArray.length) {
var o:Object = myArray.shift();
trace("myArray.length = "+myArray.length+", myArray[0] = "+o.n);
}
}
pushArray();
trace("Trace out scene variables & functions : ");
for(var i in this) trace(i);
trace("---------- End Trace -------------");
setInterval(pushArray, 9000); //每9秒執行pushArray
setInterval(popArray, 1000); //每秒執行popArray |
|
|
|
|
|
|
|

楼主 |
发表于 13-5-2007 05:09 PM
|
显示全部楼层
这个真的很棒
非常谢谢您了。。。
这个应该正是我想找的queue(FIFO)..
如果是stack (LIFO)的话呢?。。应该用什么 |
|
|
|
|
|
|
|
发表于 13-5-2007 05:19 PM
|
显示全部楼层
LIFO的話把myArray.shift()換成myArray.pop()就可以了啊, 主要看所需要求更換array的函數即可 |
|
|
|
|
|
|
|

楼主 |
发表于 13-5-2007 05:25 PM
|
显示全部楼层
对对对 。。哈哈。。。。我想到了之后。来不及删就被你回了。
谢谢 |
|
|
|
|
|
|
|

楼主 |
发表于 13-5-2007 09:55 PM
|
显示全部楼层
如果flash array连hash table 都可以办到那就perfect 了。。  |
|
|
|
|
|
|
|

楼主 |
发表于 13-5-2007 10:16 PM
|
显示全部楼层
3. For each
=======================
请问
for (var i=0;i<DuggQueue.length;i++)
{
var myDigg = DuggQueue[i];
trace(myDigg.name);
...
...
...
}
是否可以这样从写。。
for (var myDigg in DuggQueue) //Is this equivalent to foreach?
{
trace(myDigg.name);
...
...
}
.....
[[i] 本帖最后由 tensaix2j 于 13-5-2007 11:01 PM 编辑 [/i]] |
|
|
|
|
|
|
|

楼主 |
发表于 13-5-2007 11:01 PM
|
显示全部楼层
4. String.replace
====================
请问,flash 有没有 string.replace("searchcha","replacment")
这东西?
[ 本帖最后由 tensaix2j 于 13-5-2007 11:02 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 14-5-2007 01:02 PM
|
显示全部楼层
String.prototype.replace = function(sourceStr:String, replaceStr:String) {
return this.split(sourceStr).join(replaceStr);
}
//上面的繼承方式放在frame上, 之後那裡都可以如下這般使用
var a = "aaabbccbbddbb";
a = a.replace("bb", "vv");
trace(a); |
|
|
|
|
|
|
|

楼主 |
发表于 14-5-2007 10:13 PM
|
显示全部楼层
split了join 有时不work..
是不是版本的问题?
[ 本帖最后由 tensaix2j 于 14-5-2007 10:17 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 15-5-2007 03:12 AM
|
显示全部楼层
split和join只要是Flash 5或以上版本都可以使用
不能Work的情況大概就是低於版本或你的搜索關鍵字沒根據大小寫 |
|
|
|
|
|
|
|

楼主 |
发表于 15-5-2007 09:04 AM
|
显示全部楼层
帮我看看这是怎么回事。
data type在作怪?
 |
|
|
|
|
|
|
|
发表于 15-5-2007 11:17 AM
|
显示全部楼层
var aaa = x.firstChild.childNodes[1];
trace(aaa);
aaa = aaa.replace("t", "xxx"); //注意用法, 該replace會回傳而不是修改本身aaa
trace(aaa); |
|
|
|
|
|
|
| |
本周最热论坛帖子
|