Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.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# 为什么使用多线程不能提高性能?_C#_Multithreading_Webclient - Fatal编程技术网

C# 为什么使用多线程不能提高性能?

C# 为什么使用多线程不能提高性能?,c#,multithreading,webclient,C#,Multithreading,Webclient,所以我一直在尝试使用c#网络客户端。我设法制作了一个工作程序(控制台应用程序),代码如下: static void Search(string number) { using (var client = new WebClient()) { for (int a = 0; a < globalvariable.lenght; a++) { string toWrite = "nothing";

所以我一直在尝试使用c#
网络客户端
。我设法制作了一个工作程序(控制台应用程序),代码如下:

static void Search(string number)
{
    using (var client = new WebClient())
    {
        for (int a = 0; a < globalvariable.lenght; a++)
        {
            string toWrite = "nothing";
            for (int b = 0; a < globalvariable2.lenght; b++)
            {
                string result = client.DownloadString(urlString);
                //do stuff with toWrite if page is not empty
                //change toWrite and break the b loop
            }
            Console.WriteLine(toWrite);
        }
    }
}
然后是调用它的函数:

private static void ASearch(string number)
{
    var tasks = new List<Task>();
    for(int a=0; a<gobalvariable.Length; a++)
    {
        tasks.Add(AWrite(number, a));
    }
    Task.WaitAll(tasks.ToArray());
}
private static void ASearch(字符串编号)
{
var tasks=新列表();

对于(int a=0;a您可以更改HTTP连接限制:

System.Net.ServicePointManager.DefaultConnectionLimit = 5;

请签出并查看有关该类的文章。使用此属性,您可以更改HTTP连接的默认连接限制。

您可以更改HTTP连接限制:

System.Net.ServicePointManager.DefaultConnectionLimit = 5;

请查看并查看有关该类的文章。使用此属性,您可以更改HTTP连接的默认连接限制。

最后,限制在我下载的站点中。它限制为每人1个HTTP连接。谢谢您的想法。

最后,限制在我下载的站点中。它是每个人有一个HTTP连接。谢谢你的想法。

我认为一个web客户端一次只能处理一个请求。我确信一个单一的客户端只能处理一个请求。但是,由于我基本上在不同的线程上使用多个客户端,这些多个客户端可以不发出多个请求吗?一个任务可能会映射到不同的线程,也可能不会t、 那么你是说可能每个webclient请求都在同一个线程上执行?如果是的话,我有什么方法可以更改吗?编辑:每次,所有的请求(通常是23个)?@nix您正在做的工作不是CPU绑定的工作,而是IO绑定的工作。IO发生时没有线程被使用。只需要一个线程来发送初始请求(您只需要使用一个线程)并在收到响应后处理响应(从技术上讲,如果没有同步上下文,您允许在多个线程上进行同步,但这只是您所做工作的一小部分)。您的网络连接处理并发请求的能力与CPU上运行的线程及其执行的操作无关。我认为web客户端一次只能处理一个请求。我确信单个客户端只能处理一个请求。但由于我基本上在不同的线程上使用多个客户端,这些多个客户端可以吗不发出多个请求?一个任务可能映射到不同的线程,也可能不映射到不同的线程。因此,您的意思是,可能每个webclient请求都在同一个线程上执行?如果是,是否有任何方法可以更改?编辑:每次,所有线程(通常为23个)?@nix您正在做的工作不是CPU绑定的工作,而是IO绑定的工作。IO发生时没有线程被使用。只需要一个线程来发送初始请求(您只需要使用一个线程)并在收到响应后处理响应(从技术上讲,如果没有同步上下文,这是允许在多个线程上发生的,但这只是您所做工作的一小部分)。网络连接处理并发请求的能力与CPU上运行的线程及其所做的工作无关。