Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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# SmtpClient可伸缩性问题(只有两个正在运行的请求)_C#_.net_Networking_Smtp_Smtpclient - Fatal编程技术网

C# SmtpClient可伸缩性问题(只有两个正在运行的请求)

C# SmtpClient可伸缩性问题(只有两个正在运行的请求),c#,.net,networking,smtp,smtpclient,C#,.net,Networking,Smtp,Smtpclient,我正在尝试使用Windows Server 2008 64位企业版上32个CPU的.NET 4.5中的方法发送大量电子邮件 在调试期间,我发现只有两个请求同时运行。考虑到我使用的是服务器操作系统,这很奇怪 下面是一个简单的测试用例: static void Main(string[] args) { var sw = Stopwatch.StartNew(); var t1 = SendEmail(); var t2 = SendEmail(); var t3 =

我正在尝试使用Windows Server 2008 64位企业版上32个CPU的.NET 4.5中的方法发送大量电子邮件

在调试期间,我发现只有两个请求同时运行。考虑到我使用的是服务器操作系统,这很奇怪

下面是一个简单的测试用例:

static void Main(string[] args)
{
    var sw = Stopwatch.StartNew();
    var t1 = SendEmail();
    var t2 = SendEmail();
    var t3 = SendEmail();
    var t4 = SendEmail();
    var t5 = SendEmail();
    var t6 = SendEmail();
    var t7 = SendEmail();
    var t8 = SendEmail();
    Task.WaitAll(t1, t2, t3, t4, t5, t6, t7, t8);
    Console.WriteLine(sw.Elapsed);
}

static async Task SendEmail()
{
    using (var smtp = new SmtpClient())
    {
        Console.WriteLine("Starting [{0}]", DateTime.UtcNow.ToString("o"));
        await smtp.SendMailAsync("...", "...", "Test", "Testing...");
        Console.WriteLine("Done [{0}]", DateTime.UtcNow.ToString("o"));
    }
}
结果呢。它启动很快,但分两批完成(参见《泰晤士报》)。在Process Explorer中检查打开的连接也会显示相同的行为

Starting [2013-03-07T14:27:17.4643296Z]
Starting [2013-03-07T14:27:17.4783382Z]
Starting [2013-03-07T14:27:17.4783382Z]
Starting [2013-03-07T14:27:17.4793387Z]
Starting [2013-03-07T14:27:17.4793387Z]
Starting [2013-03-07T14:27:17.4793387Z]
Starting [2013-03-07T14:27:17.4793387Z]
Starting [2013-03-07T14:27:17.4793387Z]
Done [2013-03-07T14:27:19.2070974Z]
Done [2013-03-07T14:27:19.2070974Z]
Done [2013-03-07T14:27:19.7541596Z]
Done [2013-03-07T14:27:19.7602234Z]
Done [2013-03-07T14:27:20.3880420Z]
Done [2013-03-07T14:27:20.3906050Z]
Done [2013-03-07T14:27:20.9254624Z]
Done [2013-03-07T14:27:20.9324577Z]
00:00:03.7476343

有没有办法真正加速更多请求?

每个ServicePoint对象的默认并发连接数限制为2个。您可以通过设置ServicePointManager.DefaultConnectionLimit为将来的ServicePoint实例修改此设置。您还可以修改现有实例的ServicePoint.ConnectionLimit-SmtpClient会公开一个ServicePoint属性,您可以使用该属性获取此属性。

在创建SmtpClient对象之前,您是否尝试过修改System.Net.ServicePointManager.DefaultConnectionLimit?或上述代码中的smtp.ServicePoint.ConnectionLimit?是!这就是原因。如果你加上那个作为答案,我会记下来的。谢谢