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

时间:2018-02-13 13:24:27

标签: azure azure-functions

我有一些想法,但我无法证实。 让我们说我们需要HttpClient课程。在每次通话中创建它都是公平的。此外,它建议have just single instance of HttpClient。 我想为HttpClient创建静态属性并在静态构造函数中初始化它。由于初始化是线程安全的,HttpClient本身是线程安全的,我们可以安全地使用它。

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

我的想法是:

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

    即使在所有AF实例中,场不是单身,我们仍然会受益。我的想法是正确的还是使用它们的副作用。

1 个答案:

答案 0 :(得分:4)

是的,你的结论是正确的。强烈建议缓存诸如HttpClient之类的内容,不仅仅是因为内存问题,还因为它有助于保持较低的连接数(您可以轻松地达到运行的沙箱中的连接限制)。

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