Azure 我应该在函数类中使用静态字段吗

Azure 我应该在函数类中使用静态字段吗,azure,azure-functions,Azure,Azure Functions,我有一些想法,但我不能证实。 假设我们需要HttpClient类。在每次通话中创建它是公平的。此外,建议您使用。 我想为HttpClient创建静态属性,并在静态构造函数中初始化它。由于初始化是线程安全的,而HttpClient本身是线程安全的,所以我们可以安全地使用它 创建静态字段可以节省函数的执行时间和内存使用。但在这种情况下是单身吗?据我所知。这意味着,当Azure决定扩展您的应用程序时,它将创建新的容器/VM并平衡实例之间的负载。因此,在本例中,HttpClient字段将是contain

我有一些想法,但我不能证实。 假设我们需要
HttpClient
类。在每次通话中创建它是公平的。此外,建议您使用。 我想为HttpClient创建静态属性,并在静态构造函数中初始化它。由于初始化是线程安全的,而HttpClient本身是线程安全的,所以我们可以安全地使用它

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

我的想法是:

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

  • 即使在AF的所有实例中field不是单例,我们仍然受益。所以我的想法是对的还是使用它们会有副作用。

    是的,你的结论是正确的。强烈建议使用诸如
    HttpClient
    之类的缓存,这不仅是出于内存方面的考虑,还因为它有助于保持较低的连接数(您可以在运行函数的沙箱中轻松达到连接限制)

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