Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查询同一服务器时多线程应用程序中的网络IO瓶颈_C#_Multithreading - Fatal编程技术网

C# 查询同一服务器时多线程应用程序中的网络IO瓶颈

C# 查询同一服务器时多线程应用程序中的网络IO瓶颈,c#,multithreading,C#,Multithreading,标题几乎说明了一切。这是TCP/IP问题吗 C#,我使用线程计时器和Join()方法同时运行了10个线程。某些或所有线程可能在同一时间查询同一服务器(我正在使用EnumerateDirectory查询远程服务器上的目录,以查看该目录是否存在)。检查本身是快速而简单的,但是如果我一次查询所有线程,那么线程退出所需的时间要长得多,而如果我只是在单个线程中逐个进行检查 这是我使用的方法的结果还是网络IO阻塞的结果 我使用10个长时间运行的TPl任务,它们在某个时候都会调用此代码。现在,线程可能不会全部

标题几乎说明了一切。这是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();