gpt4 book ai didi

c# - SmtpClient 可扩展性问题(只有两个正在运行的请求)

转载 作者:行者123 更新时间:2023-11-30 22:19:59 25 4
gpt4 key购买 nike

我正在尝试使用 SmtpClient.SendMailAsync 发送大量电子邮件来自具有 32 个 CPU 的 Windows Server 2008 64 位企业版 .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 属性,您可以使用它来获取此属性。

关于c# - SmtpClient 可扩展性问题(只有两个正在运行的请求),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15273960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com