C# 查询同一服务器时多线程应用程序中的网络IO瓶颈
标题几乎说明了一切。这是TCP/IP问题吗 C#,我使用线程计时器和Join()方法同时运行了10个线程。某些或所有线程可能在同一时间查询同一服务器(我正在使用EnumerateDirectory查询远程服务器上的目录,以查看该目录是否存在)。检查本身是快速而简单的,但是如果我一次查询所有线程,那么线程退出所需的时间要长得多,而如果我只是在单个线程中逐个进行检查 这是我使用的方法的结果还是网络IO阻塞的结果 我使用10个长时间运行的TPl任务,它们在某个时候都会调用此代码。现在,线程可能不会全部查询同一台服务器,但有时它们会查询,下面的代码块将永远无法完成 代码:C# 查询同一服务器时多线程应用程序中的网络IO瓶颈,c#,multithreading,C#,Multithreading,标题几乎说明了一切。这是TCP/IP问题吗 C#,我使用线程计时器和Join()方法同时运行了10个线程。某些或所有线程可能在同一时间查询同一服务器(我正在使用EnumerateDirectory查询远程服务器上的目录,以查看该目录是否存在)。检查本身是快速而简单的,但是如果我一次查询所有线程,那么线程退出所需的时间要长得多,而如果我只是在单个线程中逐个进行检查 这是我使用的方法的结果还是网络IO阻塞的结果 我使用10个长时间运行的TPl任务,它们在某个时候都会调用此代码。现在,线程可能不会全部
String shareStatus=“未激活”;
线程t=新线程(新线程开始(委托)(){
字符串errorString=“”;
尝试
{
List dirs=新列表(Directory.EnumerateDirectories(strLink));
}
捕获(例外e)
{
errorString=e.消息;
}
如果(errorString==“”| | errorString.Contains(“被拒绝”)==true)
shareStatus=“活动”;
}));
t、 Start();
bool completed=t.Join(10000);
如果(!已完成)
t、 中止();
谢谢您有任何代码可以共享吗?这可能有助于说明问题。显示查询代码然而,经验法则是,如果要执行IO工作负载,请使用
async
和wait
模式,如果要并行执行,则ActionBlocks
是一个不错的选择,因为它们的设计考虑到了这一点。这将允许IO成为IO,而不必等待阻塞线程和使用资源等待IO完成端口。我将代码添加到我的原始帖子中。
String shareStatus = "NOT ACTIVE";
Thread t = new Thread(new ThreadStart(delegate () {
String errorString = "";
try
{
List<string> dirs = new List<string>(Directory.EnumerateDirectories(strLink));
}
catch (Exception e)
{
errorString = e.Message;
}
if (errorString == "" || errorString.Contains("is denied") == true)
shareStatus = "ACTIVE";
}));
t.Start();
bool completed = t.Join(10000);
if (!completed)
t.Abort();