Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Работа с большим XML файлом (http://www.flasher.ru/forum/showthread.php?t=199947)

Bekass 27.05.2013 18:45

Работа с большим XML файлом
 
Доброго дня.
Получаю данные в ХМЛ в виде
<data>
<p id='1' name=''/>
<p id='1' name=''/>
...
<p id='20000'/></data>

Прохожу по циклу
Код AS1/AS2:

for each(var child:XML in xml..*)

это ХМЛ и присваиваю атрибутам значения.
Так вот этот обход на 11тыс строк занимает 18с !!!
Есть ли какие-то альтернативные методы, как работать с большими данными ?

in4core 27.05.2013 18:47

Цитата:

Так вот этот обход на 11тыс строк занимает 18с !!!
Не верю. Покажите код. Проблема скорее всего в самом цикле. Кстати ускорьтесь на for вместо for each

Bekass 27.05.2013 19:01

Вот код
Код AS3:

xml_all = new XML(str_xml);
// замеряю тут
for each(var child:XML in xml_all..*)
{
child.@name= "XXX";
child.@date= "YYY";
}
// замеряю тут

Добавлено через 3 минуты
ИЛИ так еще дольше
Код AS3:

var tt1_:Number = (new Date()).getTime();
  var ix:int=0;
  while(xmlDP.entry[ix])
  //for each(var child:XML in xmlDP.entry)
  {
    xmlDP.entry[ix].@id_doc=String(ix);
    xmlDP.entry[ix].@id_row=String(ix);
    ix++;
  }
var tt2_:Number = (new Date()).getTime();
trace(ix+' tt:'+String(tt2_-tt1_))


in4core 27.05.2013 19:06

Код AS3:

for(var i:int = 0; i < xml.children().length(); i++)
{
  xml.p[i].@name = "XXX";
  xml.p[i].@date = "YYY";
}

замерь

Добавлено через 3 минуты
Даже если будет идти такая долгая перетрубация, я так понимаю это идет в ините приложения, то есть пока оно не отрботает - приложением пользоваться не получится. В связи с этим можно сделать так.

tf.text = "Загрузка данных";
for(...)
tf.text = "ok";

Ну или экран повесить какой то, или прелоадер пустить красивый. Вообщем это не страшно, а вот если во время исполнения приложения такие фентифлюшки , то лучше разбивать XML на уровни, и брать нужный ТОГДА, когда это потребуется

Babylon 27.05.2013 20:14

Что ж там в этих 11 тысячах строк и для чего XML как не структуирования?

Bekass 27.05.2013 20:14

Еще дольше 18с

Добавлено через 1 минуту
Цитата:

Сообщение от Babylon (Сообщение 1135106)
Что ж там в этих 11 тысячах строк и для чего XML как не структуирования?

В нем список данных одноуровневый для датагрида

Babylon 27.05.2013 20:17

дата грид не умирает? 18 сек это по божески:)

Добавлено через 36 секунд
и сервера у вас конечно нет в кустах?

GBee 27.05.2013 21:00

Цитата:

Код AS3:

for(var i:int = 0; i < xml.children().length(); i++)


Первая оптимизация - вынести длину в переменную, здесь прирост скорости будет в разы. Ну и самих детей сразу хмллист вынести, тут не уверен.

Idon'tKnow 27.05.2013 21:33

Да, GBee вещь говорит. Хоть у Вас и не такие большие значения, но вот примерная разница:

Код AS3:

private function init(e:Event = null):void 
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        // entry point
                        var someString:String = "just test!";
                        var lengthSomeString:int = someString.length;
                        var secondTime:Number = 0;
                        var firstTime:Number = (new Date()).getTime();
                        var testValueLength:int;
                        var i:int = 0;
 
                        for (i; i < 100000000; i++) {
                                testValueLength = someString.length;
                                }
                        firstTime = (new Date()).getTime() - firstTime;
                        trace(firstTime + "= с обращением к свойству строки при каждой иттерации цикла.");
                        secondTime = (new Date()).getTime();
 
                        for (i = 0; i < 100000000; i++) {
                                testValueLength = lengthSomeString;
                                }
                        secondTime = (new Date()).getTime() - secondTime;
                        trace(secondTime + "= с обращением к ссылке на свойство строки при каждой иттерации цикла.");
                }
 
        }

16088= с обращением к свойству строки при каждой итерации цикла.
9564= с обращением к ссылке на свойство строки при каждой итерации цикла.


Часовой пояс GMT +4, время: 11:18.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.