我有一个xml列表,其中包含大约50000个项目。当我搜索某些内容时,我使用for循环遍历所有元素..它可以工作,但应用程序在4秒钟内无响应。有没有更快的方法来做到这一点?
答案 0 :(得分:1)
如果您只搜索它,那么您应该使用XML搜索方法而不是循环自己。
例如:
var searchResult:XMLList = xmlData.*.(NAME == "search");
searchResult = xmlData.*.(NAME == "search" || NAME == "other");//more example
searchResult = xmlData.*.(NAME == "search" && @type == "attribute");//more example
返回带有NAME标记的所有元素,内容为" search"。你也可以查找属性等等......你可以编写复杂的搜索逻辑并获得没有任何循环的结果。
如果你绝对必须循环,那么你需要将循环分解为步骤。保留迭代器引用并设置最大循环数,例如:
var iterator:int = 0;
var maxLoop:int = 1000;
var timer:Timer = etc ...
timer.start();
现在每个Timer都会勾选你从" iterator"开始循环遍历xml。结束于" maxLoop"然后你增加"迭代器"通过maxLoop并运行第二个计时器滴答等...它不会使整个循环更快但它会阻止应用程序空闲。您甚至可以显示进度条。
编辑:删除XMLList。
如果您需要删除XMLList,则获取其索引并从其父级删除。以上面的示例为例,假设只返回一个元素(如果有多个元素使用循环),则xmlData root是NAME XMLList的父元素:
var elementIndex:int = searchResult.childIndex();
delete xmlData.NAME[elementIndex];