gpt4 book ai didi

c# - 有多个同时写入器(没有读取器)到一个文件。是否有可能在 .NET 中以高效的方式完成?

转载 作者:太空狗 更新时间:2023-10-29 19:44:05 25 4
gpt4 key购买 nike

我正在开发一个多段文件下载器。为了完成这个任务,我目前在磁盘上创建了与我拥有的段一样多的临时文件(在文件下载期间它们的数量是固定的)。最后,我只是创建了一个新文件 f 并将所有段的内容复制到 f 上。

我想知道是否有更好的方法来完成此任务。我的理想化是最初创建全尺寸的 f,然后让不同的线程直接写入它们的部分。他们之间不需要有任何互动。我们可以假设它们中的任何一个都将从文件中自己的起点开始,然后只按顺序在文件中填充信息,直到其任务结束。

我听说过内存映射文件 ( http://msdn.microsoft.com/en-us/library/dd997372(v=vs.110).aspx ),我想知道它们是否能解决我的问题。

谢谢

最佳答案

使用内存映射 API 是绝对可行的,它可能会表现得很好 - 因为建议进行一些测试。

如果你想寻找一个可能的替代实现,我有以下建议。

  • 创建一个静态堆栈数据结构,下载线程可以在下载后立即推送每个文件段。

  • 让一个单独的线程监听堆栈上的推送通知。弹出堆栈文件段,并以单线程方式将每个段保存到目标文件中。

按照上述模式,您通过在两者之间放置一个堆栈容器,将文件段的下载和保存到常规文件中分开。

根据堆栈处理的实现,您将能够用很少的线程锁定来实现它,这将最大限度地提高性能。

这样做的优点是您可以 100% 控制正在发生的事情,并且解决方案可能更便携(如果这应该是一个问题的话)。

您所做的堆栈解耦模式也可以非常通用地实现,甚至可能在将来重用。

这个的实现并不那么复杂,可能与需要围绕内存映射 api 完成的实现相当。

玩得开心...

/安德斯

关于c# - 有多个同时写入器(没有读取器)到一个文件。是否有可能在 .NET 中以高效的方式完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20876772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com