azure - 我应该在 Function 类中使用静态字段吗

标签 azure azure-functions

我有一些想法,但无法证实。 假设我们需要 HttpClient 类。每次调用时创建它都是公平的。另外,推荐have just single instance of HttpClient 。 我想为 HttpClient 创建静态属性并在静态构造函数中初始化它。由于初始化是线程安全的并且 HttpClient 本身也是线程安全的,因此我们可以安全地使用它。

创建静态字段可以节省函数的执行时间和内存使用量。但在这种情况下它是单例吗?据我了解AF can scale out instantly 。这意味着当 Azure 决定扩展您的应用程序时,它将创建新的容器/VM 并平衡实例之间的负载。因此,在这种情况下,HttpClient 字段将是容器/VM 范围内的单例,但不是应用程序之间的单例。

我的想法是:

  1. 当您需要在函数调用之间重用静态字段/属性时,请使用静态字段/属性
  2. 初始化应该是线程安全的,对象本身也应该是安全的。
  3. 如果需要重新初始化一个对象,应该使用锁。
  4. 静态属性在当前机器(容器/虚拟机)中是单例

即使字段在 AF 的所有实例中不是单例,我们仍然受益。那么我的想法是否正确,或者使用它们有副作用。

最佳答案

是的,你的结论是正确的。强烈建议缓存像 HttpClient 这样的东西,不仅仅是为了内存问题,还因为它有助于保持较低的连接数量(您可以轻松达到函数运行的沙箱中的连接限制)。

事实上,运行时的每个实例都会有自己的副本,但这仍然非常有益,因为给定的运行时实例可用于多次执行(在某些情况下是并发的,因此需要线程安全)。

关于azure - 我应该在 Function 类中使用静态字段吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48767865/

相关文章:

azure - 使用 Azure AD 与服务器进行 React-Native 身份验证

azure - 如何在 Mac 上的 Visual Studio Code 中本地运行在 Visual Studio 2019 Windows 中创建的多个 C# Az 函数应用程序?

node.js - 有没有办法在nodeJS POST API请求中指定本地文件系统路径,我能够使用curl进行api调用,但不能使用nodejs

c# - Azure Function 引发 Azure Document Client 构造函数异常(在测试工具中工作)

azure - 启动 Cosmos DB 模拟器时出错

c# - CosmosDb 的并发问题

Azure Artifacts - 下载特定版本的通用工件

azure - 当前正在安装Windows Azure Pack:网站v2,但在我的Web安装程序4.6中不存在该文件,这是什么原因?

Azure AD - 将用户和组分配给应用程序

c# - 部署后无法连接到 Azure SignalR 服务