比方说,我有一个相同类对象的列表打包成一个文件,我保存到/从应用程序启动加载。异步用法加载/保存对象列表到文件
我想要做的是使用异步处理的功能来加速加载 - 所有时间&节省所有时间 - 我们还假设文件本身被高效打包(使用协议缓冲区等)。
什么是最好的方式去做这件事?在这种情况下,异步处理会有帮助吗?
我想到的一种方法是通过选取大于1的数字,将列表除以该数字,然后使用该数字作为任务数量来保存/加载,从而“预先确定”分块的数量。然而,这似乎有点武断,我很好奇,如果有一些图书馆可能只是根据一些条件为我做出决定。
I.e.我会叫我“chunkable名单”是这样的:
Chunkable<List<SomeObject>>
..然后该程序将只瓜分列表正确的读/保存以高效的方式 - 例如保存10个文件,如“List_01”,“List_XX” - 然后在执行加载全部时从块中读取。
保存或加载时列表的最终排序并不重要 - 只需将对象作为单个列表提供即可。
瓶颈实际上是CPU还是IO?因为将IO分布到多个文件中可能不会加快速度...... –
一个有用的评论,在我想到的我不确定的示例中 - 但是出于参数的原因,我们假设它是CPU - 也就是说,一些合理数量的处理将序列化格式转换回大块对象。 – Coruscate5
您可能需要查看任务并行库(Parallel.ForEach等)以及TPL数据流。 –