我有一些想法,但无法证实。
假设我们需要 HttpClient
类。每次调用时创建它都是公平的。另外,推荐have just single instance of HttpClient 。
我想为 HttpClient 创建静态属性并在静态构造函数中初始化它。由于初始化是线程安全的并且 HttpClient 本身也是线程安全的,因此我们可以安全地使用它。
创建静态字段可以节省函数的执行时间和内存使用量。但在这种情况下它是单例吗?据我了解AF can scale out instantly 。这意味着当 Azure 决定扩展您的应用程序时,它将创建新的容器/VM 并平衡实例之间的负载。因此,在这种情况下,HttpClient 字段将是容器/VM 范围内的单例,但不是应用程序之间的单例。
我的想法是:
- 当您需要在函数调用之间重用静态字段/属性时,请使用静态字段/属性
- 初始化应该是线程安全的,对象本身也应该是安全的。
- 如果需要重新初始化一个对象,应该使用锁。
- 静态属性在当前机器(容器/虚拟机)中是单例
即使字段在 AF 的所有实例中不是单例,我们仍然受益。那么我的想法是否正确,或者使用它们有副作用。
最佳答案
是的,你的结论是正确的。强烈建议缓存像 HttpClient
这样的东西,不仅仅是为了内存问题,还因为它有助于保持较低的连接数量(您可以轻松达到函数运行的沙箱中的连接限制)。
关于azure - 我应该在 Function 类中使用静态字段吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48767865/