c#在多线程应用程序中创建文件流到网络共享速度慢

本文关键字:网络 共享 速度慢 文件 创建 多线程 应用程序 | 更新日期: 2023-09-27 18:18:37

我有一个应用程序,它有许多线程处理数据。作为此处理的一部分,它正在向网络共享写入一个小文件。我使用以下代码创建FileStream:

using (var fileStream = new FileStream("''server'path'etc", FileMode.Create, FileAccess.Write, FileShare.None))

在高负载(每秒写100个文件)下,FileStream的创建可能会花费很长时间(超过60秒)。这发生在应用程序在高负载下运行几分钟之后。

在创建FileStream时,一定有什么东西阻塞了线程。我想可能是线程在试图创建到文件共享的连接时被阻塞了。我通过进程资源管理器检查了我的进程,但没有找到到文件服务器的TCP连接。所以我猜SMB到文件服务器的连接不是通过TCP。

有没有人知道问题是什么,或者我怎么做才能达到更好的性能?

c#在多线程应用程序中创建文件流到网络共享速度慢

我怀疑您遇到了这篇知识库文章中描述的问题:如果文件在另一台计算机上打开,则共享文件访问延迟。我个人看到过这种情况,它导致Microsoft Access阻塞30秒,因为它重试了30次操作,每次阻塞1秒。也许这是这个问题的延伸。

如果您尝试在运行Windows NT的计算机上打开文件通过网络,文件在另一台客户端计算机上打开有共享限制,会有大约一秒的延迟吗在返回共享违规错误消息之前。如果客户应用程序正在访问服务器上的多个文件,此延迟可能会变得很重要。这些症状可以很容易地在任何情况下看到多用户、基于文件的应用程序,例如Jet数据库引擎共享数据库文件

我建议先尝试本地文件,看看会发生什么