У меня есть несколько сценариев, которые в настоящее время читают множество данных из некоторых файлов .CSV. Для эффективности я использую модуль Text :: CSV_XS , чтобы прочитать их, а затем создать хэш, используя один из столбцов в качестве индекса. Тем не менее, у меня есть много файлов, и они довольно большие. И каждый из сценариев должен снова прочитать данные.
Вопрос заключается в следующем: как я могу иметь постоянное хранилище этих хэшей Perl, чтобы все их можно было считывать обратно с минимумом ЦП?
Объединение сценариев не вариант. Я хотел бы ...
Я применил 2-е правило оптимизации и использовал профилирование, чтобы обнаружить, что подавляющее большинство процессоров (около 90%) находится в:
Text::CSV_XS::fields
Text::CSV_XS::Parse
Text::CSV_XS::parse
Итак, ясоздал тестовый скрипт, который считывал все файлы .CSV ( Text :: CSV_XS ), сбрасывал их с помощью модуля Storable , а затем возвращался и считывал их обратно, используя Сохраняемый модуль. Я профилировал это так, чтобы я мог видеть время процессора:
$ c:/perl/bin/dprofpp.bat
Total Elapsed Time = 1809.397 Seconds
User+System Time = 950.5560 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c Name
25.6 243.6 243.66 126 1.9338 1.9338 Storable::pretrieve
20.5 194.9 194.92 893448 0.0002 0.0002 Text::CSV_XS::fields
9.49 90.19 90.198 893448 0.0001 0.0001 Text::CSV_XS::Parse
7.48 71.07 71.072 126 0.5641 0.5641 Storable::pstore
4.45 42.32 132.52 893448 0.0000 0.0001 Text::CSV_XS::parse
(the rest was in terms of 0.07% or less and can be ignored)
Итак, использование Storable стоит около 25,6% для загрузки обратно по сравнению с Text :: CSV_XS около 35%. Не много экономии ...
Кто-нибудь получил предложение о том, как я могу более эффективно читать эти данные?
Спасибо за вашу помощь.