Почему объявление CosmosClient в качестве частного состояния c решает мою проблему? - PullRequest
0 голосов
/ 11 марта 2020

У меня были серьезные проблемы со сбоями сокетов и буферов при использовании CosmosDB SDK v3, после устранения неполадок в течение некоторого времени я обнаружил в справочных документах, что клиент должен быть объявлен как частный и статический c

I объявил это следующим образом

CosmosClient cosmosClient = new CosmosClient(cosmosDBEndpointUrl, cosmosDBPrimaryKey, new CosmosClientOptions() { AllowBulkExecution = false });

, поэтому я изменил его на

private static CosmosClient cosmosClient = new CosmosClient(cosmosDBEndpointUrl, cosmosDBPrimaryKey, new CosmosClientOptions() { AllowBulkExecution = false });

, так что, похоже, это решило проблему.

Может кто-нибудь объяснить, пожалуйста, мне, почему это решает мою проблему простым способом? Разница заключается в том, что он гарантирует, что ОДИН клиент используется для всех соединений? иначе я не могу понять, почему это будет иметь значение?

Ответы [ 2 ]

2 голосов
/ 11 марта 2020

Из документов

CosmosClient является поточно-ориентированным. Рекомендуется поддерживать один экземпляр CosmosClient на протяжении всего срока службы приложения, что обеспечивает эффективное управление подключениями и производительность. Пожалуйста, обратитесь к руководству по производительности.

0 голосов
/ 19 марта 2020

Как вы говорите, stati c гарантирует, что в вашем приложении есть только один его экземпляр, что является наилучшей практикой для CosmosClient, а также важно ограничить использование других ресурсов, таких как HttpClient.

Не обязательно быть приватным.

Вот пример кода, который инициализирует ваш CosmosClient (или в данном случае DocumentClient) с отложенной загрузкой, которая должна позволить вашему приложению запускаться немного быстрее.

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; } }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...