Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 27.05.2013, 18:45
Bekass вне форума Посмотреть профиль Отправить личное сообщение для Bekass Найти все сообщения от Bekass
  № 1  
Ответить с цитированием
Bekass

Регистрация: Nov 2005
Сообщений: 73
Attention Работа с большим 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с !!!
Есть ли какие-то альтернативные методы, как работать с большими данными ?

Старый 27.05.2013, 18:47
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 2  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
Так вот этот обход на 11тыс строк занимает 18с !!!
Не верю. Покажите код. Проблема скорее всего в самом цикле. Кстати ускорьтесь на for вместо for each
__________________
Марк Tween

Старый 27.05.2013, 19:01
Bekass вне форума Посмотреть профиль Отправить личное сообщение для Bekass Найти все сообщения от Bekass
  № 3  
Ответить с цитированием
Bekass

Регистрация: Nov 2005
Сообщений: 73
Вот код
Код 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_))

Старый 27.05.2013, 19:06
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 4  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Код 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 на уровни, и брать нужный ТОГДА, когда это потребуется
__________________
Марк Tween

Старый 27.05.2013, 20:14
Babylon вне форума Посмотреть профиль Отправить личное сообщение для Babylon Посетить домашнюю страницу Babylon Найти все сообщения от Babylon
  № 5  
Ответить с цитированием
Babylon
[+1 25.10.13]
[+4 18.03.14]
 
Аватар для Babylon

Регистрация: Jan 2006
Адрес: Москва, Зеленоград
Сообщений: 653
Отправить сообщение для Babylon с помощью ICQ
Что ж там в этих 11 тысячах строк и для чего XML как не структуирования?

Старый 27.05.2013, 20:14
Bekass вне форума Посмотреть профиль Отправить личное сообщение для Bekass Найти все сообщения от Bekass
  № 6  
Ответить с цитированием
Bekass

Регистрация: Nov 2005
Сообщений: 73
Еще дольше 18с

Добавлено через 1 минуту
Цитата:
Сообщение от Babylon Посмотреть сообщение
Что ж там в этих 11 тысячах строк и для чего XML как не структуирования?
В нем список данных одноуровневый для датагрида

Старый 27.05.2013, 20:17
Babylon вне форума Посмотреть профиль Отправить личное сообщение для Babylon Посетить домашнюю страницу Babylon Найти все сообщения от Babylon
  № 7  
Ответить с цитированием
Babylon
[+1 25.10.13]
[+4 18.03.14]
 
Аватар для Babylon

Регистрация: Jan 2006
Адрес: Москва, Зеленоград
Сообщений: 653
Отправить сообщение для Babylon с помощью ICQ
дата грид не умирает? 18 сек это по божески

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

Старый 27.05.2013, 21:00
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 8  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Цитата:
Код AS3:
for(var i:int = 0; i < xml.children().length(); i++)
Первая оптимизация - вынести длину в переменную, здесь прирост скорости будет в разы. Ну и самих детей сразу хмллист вынести, тут не уверен.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 27.05.2013, 21:33
Idon'tKnow вне форума Посмотреть профиль Отправить личное сообщение для Idon'tKnow Найти все сообщения от Idon'tKnow
  № 9  
Ответить с цитированием
Idon'tKnow

Регистрация: Apr 2013
Сообщений: 77
Да, 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, время: 07:47.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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