C#在多线程应用程序中创建FileStream到网络共享速度慢

时间:2011-12-23 16:20:18

标签: c# .net multithreading

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

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

在高负载下(每秒写入100个文件),FileStream CAN的创建需要很长时间(超过60秒)。应用程序在高负载下运行几分钟后会发生这种情况。

在创建FileStream时必须有一些阻塞线程的东西。我想也许线程被阻止尝试创建与文件共享的连接。我通过Process Explorer检查了我的进程,但找不到与文件服务器的TCP连接。所以我猜测与文件服务器的SMB连接不是通过TCP。

有没有人知道问题是什么,或者我如何以不同的方式做事以获得更好的表现?

1 个答案:

答案 0 :(得分:1)

我怀疑您遇到了此知识库文章中描述的问题:Shared file access is delayed if the file is open on another computer。我个人看到这导致Microsoft Access阻止30秒,因为它重试了30次操作,每次阻塞一秒钟。也许这是这个问题的延伸。

  

如果您尝试在运行Windows NT的计算机上打开文件   通过网络,该文件在另一台客户端计算机上打开   有共享限制,延迟大约一秒钟   在返回共享冲突错误消息之前。如果是客户   应用程序正在访问服务器上的许多文件,这种延迟   可能变得重要。这些症状可以很容易地看出来   多用户,基于文件的应用程序,例如Jet数据库引擎   它有共享数据库文件。

我首先会先尝试尝试本地文件然后看看会发生什么。