【问题标题】:best way to handle multiple streams to same file将多个流处理到同一个文件的最佳方法
【发布时间】:2016-05-09 01:06:53
【问题描述】:

我正在尝试创建二进制存储。文件一经添加,不可删除。所有文件都存储在同一个主文件 (storage.bin) 中。我将有一个表索引,其中包含成对的(键、startFilePos、fileLength)。

在开始编码之前,我正在努力寻找最佳解决方案。由于我对 .net 下的流不太熟悉,因此我想对它们提出一些建议。

  1. 多个流到同一个文件 (storage.bin) 是一种解决方案吗? 由于文件可以并行添加,一旦我开始接收文件,我 为其保留磁盘空间并开始写入特定的 文件到保留块,同时添加其他相同场景的文件 在其他线程上。

  2. 如果 (1) 是一个可行的解决方案,它是最优的吗?如果没有,可以 你指的是更好的吗?

  3. 为每个文件添加方案分配线程的最佳方式是什么?似乎 1 个线程/1 个流不是一个可行的解决方案。我在想的是有一个线程池,如果达到限制,让一个新文件等待一个可用。

【问题讨论】:

    标签: c# .net multithreading thread-safety filestream


    【解决方案1】:
    1. 多个流到同一个文件 (storage.bin) 是一种解决方案吗?由于文件可以并行添加,一旦我开始接收文件,我 为其保留磁盘空间并开始写入该特定文件 到保留块,同时添加其他相同场景的文件 其他线程。

    是的,这可能是一个解决方案。只要不同的流写入文件的不同非重叠段,就不会有问题。

    1. 如果 (1) 是一个可行的解决方案,它是最优的吗?如果没有,你能指出一个更好的吗?

    使用单独的文件并将索引保​​存在主文件中。

    1. 为每个文件添加方案分配线程的最佳方式是什么?似乎 1 个线程/1 个流不是一个可行的解决方案。 我在想的是有一个线程池,如果限制是 已达到,请等待一个新文件可用

    您刚刚描述了线程池的工作原理。在自己动手之前,请确保您已经检查了直接内置于框架中的 ThreadPool 类。或者自定义concurrency limiting task scheduler。

    【讨论】:

    • 感谢您的快速回复!关于(2),我受到特定问题的限制,无法在单个文件中处理所有内容。如果由我决定,我会保留单独的文件。
    • 那你为什么要问是否有更好的方法 - 你似乎已经知道这个问题的答案:-)
    猜你喜欢
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    相关资源
    最近更新 更多