У меня есть проект ASP.NET Web API 2.0, работающий в Azure. Основной метод вызывается каждую минуту тысячами удаленных устройств. Кажется, есть проблема с памятью. При запуске API загрузка памяти составляет около 40%. В течение 24 часов это ползет до 80 +%, после чего я перезагружаю службу, и память падает до 40%, и цикл начинается снова. Это относительно новая проблема, связанная с увеличением количества подключаемых устройств. Я думаю, что некоторый порог был достигнут.
Основной метод, который вызывают удаленные устройства, в основном берет данные устройства и помещает их в очередь Azure через CloudQueueClient. Прежде чем загрузка памяти стала проблемой, я создавал новый CloudQueueClient для каждого вызова. Когда я изменил это на глобальный CloudQueueClient, проблемы с памятью, казалось, немного уменьшились - время, которое потребовалось для перехода с 40% - 80%, увеличилось в 10 раз. Вот почему я думаю, что мое использование объектов CloudQueueClient и CloudQueue может быть проблемой.
Я нажимаю данные устройства, используя:
var queue = queueClient.GetQueueReference(queueName);
await queue.AddMessageAsync(new CloudQueueMessage(message));
Где queueClient - это мой глобальный экземпляр CloudQueueClient. Как видите, я все еще создавал экземпляр CloudClient при каждом вызове. Должен ли я повторно использовать экземпляр CloudClient для каждого вызова.
У меня простой вопрос, как правильно использовать CloudQueueClient и CloudQueue в контексте приложения Web API?
Обратите внимание, что я распределяю входящие сообщения устройства по нескольким очередям, чтобы облегчить загрузку в каждой очереди, чтобы избежать удушения.