Ann*_*nie 6 c# azure azure-storage
我正在使用 blob 和队列存储、redis chache、documentdb 和 azure sql 数据库并创建 CloudStorageAccount、客户端和容器对象。这些类是否实现了 IDisposable。我是否必须使用“使用”或尝试 finally 块来释放对象/将其设置为 null?
不幸的是,这不是一个直接的答案。有些确实实施IDisposable
,有些则没有。在一般的 .net 实践中,您应该始终处理一次性对象,无论是在 finally 中还是使用 using 模式。无论您是在编写 Azure 函数、WebApp 还是控制台应用程序等,这都是如此。您不需要将对象设置为 null,处置就足够了。只有非托管对象需要“清空”,这将在Dispose()
调用的方法中完成。请参阅 IDisposable 模式。
然而,事情并不是那么简单。例如,CosmosDB 连接实现IDisposable
,但建议创建单个实例/单例以用于您的应用程序,因为客户端是线程安全的,并且多个客户端实例可能会导致多线程实现中的线程耗尽,因此您不希望每次使用包含在 using 子句中。处置变得不那么重要,因为对象的生命周期与应用程序域的生命周期相同(或接近)。
因此,经验法则始终是处置,但是,请检查文档以获取最佳实践,尤其是在涉及连接对象时。
@McGuireV10 在评论中提出了很好的观点和建议。您需要注意,一个函数的许多实例可能会在托管应用程序域的同一实例中执行。每个函数都是一个实例化,而不是一个新的应用程序域(随着函数扩展/移动/改变运行状况,它会定期发生)
归档时间: |
|
查看次数: |
1877 次 |
最近记录: |