Предположим, у меня есть список объектов одного класса, упакованных в один файл, который я сохраняю в/load при запуске приложения.Использование Async для загрузки/сохранения списка объектов в файлах
Что я хотел бы сделать, так это использовать синтаксис асинхронной обработки для ускорения загрузки всего времени & save-all time - давайте также предположим, что сами файлы эффективно упакованы (с использованием протокольных буферов или тому подобного).
Что было бы лучшим способом сделать это? Асинхронная обработка действительно поможет в этом сценарии?
Один из методов, который, как я думал, заключается в «предварительном определении» количества фрагментов путем выбора числа больше 1, деления списка на это число, а затем сохранения/загрузки с использованием этого числа в виде количества задач. Однако это кажется несколько произвольным, & Мне было любопытно, есть ли там библиотеки, которые могут просто принять решение для меня на основе некоторых условий.
I.e. Я мог бы назвать свою «chunkable список» что-то вроде:
Chunkable<List<SomeObject>>
.. и тогда программа будет просто разделить список правильно читать/сохранить эффективным способом - например, сохраните 10 файлов, таких как «List_01», «List_XX», а затем прочитайте из кусков при выполнении нагрузки.
Окончательный заказ списка при сохранении или загрузке не имеет значения - просто наличие объектов в виде единого списка.
Является ли узким местом на самом деле CPU, или IO? Поскольку распространение IO на несколько файлов вряд ли ускорит его ... –
Полезный комментарий, и в примере, о котором я думаю, я не уверен - но, ради аргумента, скажем, это CPU - т.е. есть некоторый разумный объем обработки для перевода формата сериализации обратно в кусок объектов. – Coruscate5
Возможно, вы захотите посмотреть параллельную библиотеку задач (Parallel.ForEach и т. Д.), А также поток данных TPL. –