加载/保存对象列表到文件的异步使用

时间:2016-09-21 18:59:56

标签: multithreading asynchronous io parallel-processing

假设我有一个包含在单个文件中的同类对象列表,我在应用程序启动时保存到/加载。

我想做的是利用异步处理的强大功能来加速加载 - 所有时间& save-all time - 让我们假设文件本身是有效打包的(使用Protocol Buffers等)。

最好的方法是什么?在这种情况下,异步处理实际上会有帮助吗?

我想到的一种方法是通过选择一个大于1的数字来“预先确定”分块量,将列表除以该数字,然后使用该数字作为任务数量保存/加载。然而,这似乎有点武断,&我很好奇是否有一些库可能会根据某些条件为我做出决定。

即。我可以将我的“可分类列表”称为:

Chunkable<List<SomeObject>>

..然后程序将正确地划分列表以有效的方式读取/保存 - 例如保存10个文件,如“List_01”,“List_XX” - 然后在执行加载时从块中读取。

在保存或加载时,列表的最终排序并不重要 - 只需将对象作为单个列表提供即可。

1 个答案:

答案 0 :(得分:0)

对于后人,这里的一个概念性答案是在任务并行库中使用分区器。

为了保存,我可以让分区程序序列化列表中的部分&amp;将文件写成任务以给定的非重复格式完成。

要加载,我可以获取磁盘上给定位置的现有块的计数/列表,然后将TPL加载到&amp;反序列化所有块和&amp;按照它们完成的任何顺序重新组合它们(使用一些Interlocked var来确保每个文件只读一次)。

一旦我测试了一些代码,我会在这里粘贴代码。