ksp*_*rin 3 .net c# amazon-web-services aws-sdk
.NET 的 SES 文档显示使用AmazonSimpleEmailServiceClient
初始化语句发送电子邮件using
:
using (var client = new AmazonSimpleEmailServiceClient(RegionEndpoint.USWest2))
{
//...
}
Run Code Online (Sandbox Code Playgroud)
我知道这对于一个例子来说是可以的,但是,在我的生产应用程序中,我应该AmazonSimpleEmailServiceClient
只初始化一次然后重用它吗?
// MailSender is registered with DI as Singleton
public class MailSender
{
private AmazonSimpleEmailServiceClient _client;
public MailSender()
{
_client = new AmazonSimpleEmailServiceClient(RegionEndpoint.USWest2);
}
public void SendEmail()
{
// ...
_client.SendEmail(request);
}
}
Run Code Online (Sandbox Code Playgroud)
我的生产应用程序正在发送大量电子邮件。我不确定该AmazonSimpleEmailServiceClient
对象的行为方式,但创建单个实例似乎比每次发送电子邮件时更新它的性能更高。
当重用一个类时,您关心的不仅仅是性能,还有并发性。
\n\n话虽这么说,快速浏览一下源代码就会发现这个类调用了它的基类AmazonWebServiceClient
的Dispose
方法:
#region Dispose\n\nprotected override void Dispose(bool disposing)\n{\n base.Dispose(disposing);\n}\n#endregion\n
Run Code Online (Sandbox Code Playgroud)\n\n基类不会重写 Dispose 方法,而是依赖于它自己的基类AbstractWebServiceClient
:
/// <summary>\n/// Implements the Dispose pattern for the AmazonWebServiceClient\n/// </summary>\n/// <param name="disposing">Whether this object is being disposed via a call to Dispose\n/// or garbage collected.</param>\nprotected virtual void Dispose(bool disposing)\n{\n if (!this.disposed)\n {\n if (disposing && logger != null)\n {\n logger.Flush();\n logger = null;\n }\n this.disposed = true;\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n请注意,该Dispose
方法正在清理记录器的内部实例。
因此,就性能而言,肯定有一些收获。然而,就并发性而言,代码注释中并没有提到该类是线程安全的。
\n\n然而,他们关于生命周期的客户端文档确实提到了线程安全和类重用:
\n\n\n\n\n适用于 .NET 的 AWS 开发工具包最著名的方面是可用于与 AWS 交互的各种服务客户端。客户端对象是线程 安全的、一次性的并且可以重用。(客户端对象很便宜,因此构建多个实例不会产生很大的开销,但创建和重用客户端并不是一个坏主意。)
\n
希望这有帮助。
\n 归档时间: |
|
查看次数: |
1230 次 |
最近记录: |