2013-05-17 2 views
-1

С точки зрения производительности, более полезно читать большие объемы данных из XML-файла или путем цикла через массив?XML vs Array Performance

У меня есть около 2000 наборов данных. Мне нужно выполнить цикл и выполнить вычисления, так что мне просто интересно, было бы лучше импортировать все данные XML и обрабатывать его как массив (один большой импорт) или импортировать каждый набор данных последовательно (многие небольшие объемы импорта).

Мысли и предложения?

+0

«XML vs Array» на самом деле не то, что вы просите. Я советую вам изменить свой титул. –

+2

Что говорят ваши тесты? – I4V

+0

@ l4v - Я еще не тестировал его, для этого потребуется достойная модификация кода, просто пытаясь собрать некоторый ввод в этот момент – mikedugan

ответ

1

Если я правильно истолковал ваш вопрос, вам необходимо загрузить 2000 наборов данных из одного файла, а затем обработать их все. Таким образом, вы должны прочитать все данные и обработать все данные. На базовом уровне есть такая же работа.

Поэтому я думаю, что вопрос: «Как я могу закончить такую ​​же обработку раньше?»

Рассмотрим:

Сколько памяти будет использование данных? Если это будет более 1,5 ГБ ОЗУ, то вы не сможете обрабатывать его за один проход на 32-битном ПК, и даже на 64-битных компьютерах вы, скорее всего, увидите, что производительность подкачки виртуальной памяти , В любом из этих случаев потоковая передача данных в небольших кусках является необходимостью.

И наоборот, если данные небольшие (например, 2000 записей могут быть только 200 КБ для всех, что я знаю), то вы можете получить лучшую производительность ввода-вывода, прочитав ее в одном фрагменте или загрузите так быстро по сравнению с обработкой время, когда нет смысла пытаться его оптимизировать.

Независимы ли записи? (поэтому их не нужно обрабатывать в определенном порядке, и вам не нужна одна запись, присутствующая в памяти, чтобы обрабатывать другую). Если это так, и если время загрузки в целом значимо, тогда «лучший», подход may должен быть параллелен операции. Если вы можете обрабатывать некоторые данные во время загрузки большего количества данных в фоновом режиме, вы будете использовать оборудование лучше и сделать ту же работу за меньшее время. Поэтому вы, вероятно, захотите рассмотреть возможность разделения нагрузки и обработки на разные потоки.

Но распространение обработки на многие потоки может не помочь вам, если загрузка занимает гораздо больше времени, чем обработка, так как ваши потоки обработки могут пропадать из-за данных в ожидании ввода-вывода - поэтому использование 1 потока обработки может быть таким же быстрым, как и используя 3 или 7. И нет смысла создавать больше потоков, чем у вас есть доступные ядра ЦП. Если вы собираетесь многопоточно, я бы написал его, чтобы использовать настраиваемое/динамическое число потоков, а затем выполнить некоторое тестирование, чтобы определить, каким будет оптимальный подход.

Но прежде чем вы рассмотрите все это, вам может потребоваться написать метод грубой силы и посмотреть, что такое производительность. Вы даже нуждаетесь в, чтобы его оптимизировать?

И если ответ «да, мне отчаянно нужно его оптимизировать», тогда вы можете пересмотреть формат данных? XML - очень полезный, но крайне неэффективный формат. Если у вас есть критический пример производительности, есть ли что-нибудь, что вы можете сделать для уменьшения размера XML (например, просто использование более коротких имен элементов может существенно повлиять на большие файлы) или даже использовать гораздо более компактный и легко читаемый двоичный формат?

+0

Отличный ввод там, спасибо ... так что один вопрос ... какова оптимальная промежуточная точка между XML и двоичным файлом, который поддерживает некоторый уровень удобочитаемости человека (двоичный - это «читаемый», но вы понимаете), а лучше оптимизирован для использования в программах? – mikedugan

+0

Если вы хотите, чтобы человек читал, вы используете xml, но для ускорения чтения используйте компактный формат. Например. вместо «custonername» в качестве тега элемента что-то вроде «cname», «cust» или «cn» может быть «читаемым», но намного короче. Тенденции чтения Xml должны быть линейными по отношению к размеру, если данные, поэтому вдвое размер файла обычно уменьшает время загрузки. –