【问题标题】:How to dispose the Azure Sendgrid Client?如何处理 Azure Sendgrid 客户端?
【发布时间】:2018-03-06 17:40:21
【问题描述】:

我正在使用 Azure Sendgrid 发送电子邮件。如何创建客户端发送电子邮件。它没有 Idisposable 接口。

   public async Task<string> SendEmailAsync(string EmailTo, string Username, string Subject, string PlainTextContent, string HtmlContent)
    {
        string apikey = Configuration.AzureSendgridSecretProvider.ApiKey;
        string responseStatus = "BadRequest";
        var query = "Email_" + EmailTo + ";" + "Username_" + Username + ";" + "VerficationCode_" + HtmlContent+ ";apikey" + apikey;
        var client = new SendGridClient(apikey);
        try
        {
            var msg = new SendGridMessage()
            {
                From = new EmailAddress(Configuration.AzureTableStorageSendGridProvider.EmailAddress, Configuration.AzureTableStorageSendGridProvider.EmailName),
                Subject = Subject,
                PlainTextContent = PlainTextContent,
                HtmlContent = HtmlContent
            };
            msg.AddTo(new EmailAddress(EmailTo, Username));
            var response = await client.SendEmailAsync(msg);
            responseStatus = response.StatusCode.ToString();
        }
        catch (Exception ex)
        {

        }
        return responseStatus;
    }
  1. 我们可以创建单个客户端来发送所有 SMS(Singleton)
  2. 发送成功后如何调用 using{} 处理对象?
  3. 如上调用时是否存在内存泄漏?

【问题讨论】:

  • 你是在问它是否有内存泄漏?为什么你认为它必须是IDisposable
  • 我正在使用上面的代码。需要遵循的最佳方法是什么?我必须在我的应用程序中发送并发短信。会好还是不好?

标签: c# azure sendgrid


【解决方案1】:

1.我们可以创建单个客户端来发送所有短信(Singleton)

您可以使用 sendgrid 的 bulk email service 将电子邮件通信发送到多个收件人的大型列表。

2.发送成功后如何调用 using{} 处理对象?

我反编译了 sendgrid 客户端,发现它依赖 HttpClient 来处理您的工作站与其 API 之间的实际 Http 通信。

http 客户端实现了 IDisposable 接口来处理每个 http 请求,而 sendgrid 客户端没有一次性实例

3.如上调用时是否有内存泄漏?

随着时间的推移,调用邮件 api 的 sendgrid 客户端 似乎会保留或内存泄漏。

当您尝试发送数百或数千封电子邮件时,您会看到内存使用量增加。无论客户端中保留的是什么,甚至几天后都不会释放内存,我们不得不重新启动服务器清除它。

SendGrid 客户端依赖于 Microsoft 的 HttpClient 来处理您的工作站与其 API 之间的实际 HTTP 通信。

您可以尝试实例化一个 HttpClient 并将其重用于您的每个 HTTP 请求。

更多详情,您可以参考这个article

【讨论】:

    猜你喜欢
    • 2019-07-26
    • 2018-12-19
    • 1970-01-01
    • 2017-02-12
    • 2021-02-02
    • 2013-04-21
    • 2019-03-04
    • 1970-01-01
    • 2011-02-07
    相关资源
    最近更新 更多