gpt4 book ai didi

c# - 我们是否必须在 azure 函数中处理垃圾收集?

转载 作者:行者123 更新时间:2023-11-30 17:30:51 24 4
gpt4 key购买 nike

我正在使用 blob 和队列存储、redis chache、documentdb 和 azure sql 数据库并创建 CloudStorageAccount、客户端和容器对象。这些类是否实现了 IDisposable。我是否必须使用“using”或尝试finally block 来释放对象/将其设置为空?

最佳答案

不幸的是,这不是一个直接的答案。有些确实实现了 IDisposable,有些则没有。在一般的 .net 实践中,您应该始终处理一次性对象,无论是在 finally 中还是使用 using 模式。无论您是在编写 Azure 函数、WebApp 还是控制台应用程序等,这都是如此。您不需要将对象设置为 null,处置就足够了。只有非托管对象需要“清空”,这将在调用的 Dispose() 方法中完成。 See the IDisposable pattern .

但是,事情并不是那么简单。例如,CosmosDB 连接实现了 IDisposable,但建议创建单个实例/singleton 用于您的应用程序,因为客户端是线程安全的,并且多个客户端实例可能会导致多线程实现中的线程耗尽,因此您不希望每个使用都包含在 using 子句中。处置变得不那么重要,因为对象的生命周期与应用程序域的生命周期相同(或接近)。

因此,经验法则始终是处置,但是,请检查文档以获取最佳实践,尤其是在涉及连接对象时。

@McGuireV10 在评论中提出了很好的观点和建议。您需要注意,一个函数的许多实例可能会在托管应用程序域的同一实例中执行。每个函数都是一个实例化,而不是一个新的应用程序域(随着函数扩展/移动/改变运行状况,它会定期发生)

关于c# - 我们是否必须在 azure 函数中处理垃圾收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48945526/

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