Если я правильно истолковал ваш вопрос, вам необходимо загрузить 2000 наборов данных из одного файла, а затем обработать их все. Таким образом, вы должны прочитать все данные и обработать все данные. На базовом уровне есть такая же работа.
Поэтому я думаю, что вопрос: «Как я могу закончить такую же обработку раньше?»
Рассмотрим:
Сколько памяти будет использование данных? Если это будет более 1,5 ГБ ОЗУ, то вы не сможете обрабатывать его за один проход на 32-битном ПК, и даже на 64-битных компьютерах вы, скорее всего, увидите, что производительность подкачки виртуальной памяти , В любом из этих случаев потоковая передача данных в небольших кусках является необходимостью.
И наоборот, если данные небольшие (например, 2000 записей могут быть только 200 КБ для всех, что я знаю), то вы можете получить лучшую производительность ввода-вывода, прочитав ее в одном фрагменте или загрузите так быстро по сравнению с обработкой время, когда нет смысла пытаться его оптимизировать.
Независимы ли записи? (поэтому их не нужно обрабатывать в определенном порядке, и вам не нужна одна запись, присутствующая в памяти, чтобы обрабатывать другую). Если это так, и если время загрузки в целом значимо, тогда «лучший», подход may должен быть параллелен операции. Если вы можете обрабатывать некоторые данные во время загрузки большего количества данных в фоновом режиме, вы будете использовать оборудование лучше и сделать ту же работу за меньшее время. Поэтому вы, вероятно, захотите рассмотреть возможность разделения нагрузки и обработки на разные потоки.
Но распространение обработки на многие потоки может не помочь вам, если загрузка занимает гораздо больше времени, чем обработка, так как ваши потоки обработки могут пропадать из-за данных в ожидании ввода-вывода - поэтому использование 1 потока обработки может быть таким же быстрым, как и используя 3 или 7. И нет смысла создавать больше потоков, чем у вас есть доступные ядра ЦП. Если вы собираетесь многопоточно, я бы написал его, чтобы использовать настраиваемое/динамическое число потоков, а затем выполнить некоторое тестирование, чтобы определить, каким будет оптимальный подход.
Но прежде чем вы рассмотрите все это, вам может потребоваться написать метод грубой силы и посмотреть, что такое производительность. Вы даже нуждаетесь в, чтобы его оптимизировать?
И если ответ «да, мне отчаянно нужно его оптимизировать», тогда вы можете пересмотреть формат данных? XML - очень полезный, но крайне неэффективный формат. Если у вас есть критический пример производительности, есть ли что-нибудь, что вы можете сделать для уменьшения размера XML (например, просто использование более коротких имен элементов может существенно повлиять на большие файлы) или даже использовать гораздо более компактный и легко читаемый двоичный формат?
«XML vs Array» на самом деле не то, что вы просите. Я советую вам изменить свой титул. –
Что говорят ваши тесты? – I4V
@ l4v - Я еще не тестировал его, для этого потребуется достойная модификация кода, просто пытаясь собрать некоторый ввод в этот момент – mikedugan