首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么将CosmosClient声明为私有静态解决了我的问题?

为什么将CosmosClient声明为私有静态解决了我的问题?
EN

Stack Overflow用户
提问于 2020-03-11 01:19:58
回答 2查看 905关注 0票数 1

在使用CosmosDB SDK v3解决问题一段时间后,在参考文档中发现客户端应该被声明为私有和静态的,我遇到了严重的套接字和缓冲区故障。

我声明如下:

代码语言:javascript
复制
CosmosClient cosmosClient = new CosmosClient(cosmosDBEndpointUrl, cosmosDBPrimaryKey, new CosmosClientOptions() { AllowBulkExecution = false });

所以我把它改成了这个

代码语言:javascript
复制
private static CosmosClient cosmosClient = new CosmosClient(cosmosDBEndpointUrl, cosmosDBPrimaryKey, new CosmosClientOptions() { AllowBulkExecution = false });

到目前为止,这似乎已经解决了这个问题。

有谁能给我解释一下为什么这样简单地解决了我的问题?它是否确保将一个客户端重新用于所有连接?否则我就看不出这有什么区别了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-19 20:56:09

正如您所说的,静态确保应用程序中只有一个实例,这是CosmosClient的最佳实践,限制其他资源(如HttpClient )的使用也很重要。

它不需要是私人的。

下面是一个代码示例,它将使用延迟加载来初始化您的CosmosClient (或者在本例中是DocumentClient),这将使您的应用程序启动速度稍微快一些。

代码语言:javascript
复制
private static Lazy<DocumentClient> lazyClient = new Lazy<DocumentClient>(InitializeDocumentClient);
private static DocumentClient documentClient => lazyClient.Value;

private static DocumentClient InitializeDocumentClient()
{
    var endpointUrl = Environment.GetEnvironmentVariable("CosmosEndpoint", EnvironmentVariableTarget.Process);
    var authorizationKey = Environment.GetEnvironmentVariable("CosmosAuthorizationKey", EnvironmentVariableTarget.Process);
    return new DocumentClient(new Uri(endpointUrl), authorizationKey, ConnectionPolicy);
}

public static DocumentClient DocumentClient { get { return documentClient; } }
票数 2
EN

Stack Overflow用户

发布于 2020-03-11 01:25:46

来自文档

CosmosClient是线程安全的.它建议在应用程序的每个生命期维护一个CosmosClient实例,从而实现高效的连接管理和性能。请参阅性能指南。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60628030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档