处理多个流到同一文件的最佳方法

时间:2016-01-31 16:12:24

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

我正在尝试创建二进制存储。文件一旦添加,就无法删除。所有文件都存储在同一主文件(storage.bin)中。我将有一个表索引与成对(键,startFilePos,fileLength)。

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

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

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

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

1 个答案:

答案 0 :(得分:1)

  
      
  1. 是多个流到同一个文件(storage.bin)的解决方案?由于文件可以并行添加,一旦我开始接收文件,i   为它保留磁盘空间并开始编写该特定文件   添加其他相同方案文件时保留块   其他主题。
  2.   

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

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

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

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

您刚刚描述了线程池的工作原理。在自己编辑之前,请确保已检查直接构建到框架中的ThreadPool类。或者自定义concurrency limiting task scheduler