【问题标题】:Filestream Pointers文件流指针
【发布时间】:2016-07-04 07:17:54
【问题描述】:

我需要将许多小文件流复制到一个文件流中。每个文件流都有自己的指定位置,即FS1先行,FS2后行,以此类推。但是在程序多线程时,先完成处理的线程先添加,导致错误。

有什么方法可以定义它的位置,这样无论我们添加它们的顺序是什么,它们都会出现在正确的位置??

我通过预先创建许多标头来尝试这样做,以便文件流将替换这些标头,但是搜索这些标头只会减慢程序的速度。

这个问题是我上一个问题的延续,因为 First processesFS 首先跳转(Copies),所以我们需要定义它的复制位置。

请参考这个问题:

Sequential MT

【问题讨论】:

  • 肯定有可能解决您的问题。不过,您首先需要清楚地说明问题。多线程磁盘访问似乎不太可能导致性能提升。也许你过于复杂了。

标签: filestream delphi-2010


【解决方案1】:

你不能让多个线程同时写入同一个文件而不用同步锁包装它,你还需要根据情况来回重新搜索流在任何给定时刻哪个线程需要写入它,因此它在文件中的正确偏移处写入。这是很多开销。

但是,您可以让多个线程使用不同的文件流同时写入同一个文件,前提是流之间的共享权限兼容以允许并发写入和保存数据。将文件预先调整为所需的长度,然后根据需要在线程中分割该长度的部分。将每个线程自己的流提供给目标文件,首先寻找其分配部分的适当起始偏移量。然后每个线程可以正常写入其各自的流,而无需与其他线程同步或重新寻找其流。只需确保每个线程不超过文件中其分配部分的边界,这样它就不会覆盖另一个线程的数据。

【讨论】:

    猜你喜欢
    • 2014-01-22
    • 2020-09-06
    • 2021-11-06
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 2016-09-02
    相关资源
    最近更新 更多