我有一个在Azure中运行的ASP.NET Web API 2.0项目。 1000分钟的远程设备每分钟调用一次主要方法。似乎存在内存问题。 API启动时,内存加载量约为40%。在24小时内,这个爬升到80 +%,此时我重新启动服务并且内存下降到40%并且循环再次开始。这是一个相对较新的问题,因为连接的设备数量不断增加。我想已经达到了一些门槛。
远程设备调用的主要方法基本上是获取设备数据,并通过CloudQueueClient将其推送到Azure队列。在内存加载成为问题之前,我正在为每个调用创建一个新的CloudQueueClient。当我将其更改为全局CloudQueueClient时,内存问题似乎有所缓解 - 从40%到80%的时间增加了10倍。这就是为什么我认为我可能会使用CloudQueueClient和CloudQueue对象。
我使用以下方式推送设备数据:
var queue = queueClient.GetQueueReference(queueName);
await queue.AddMessageAsync(new CloudQueueMessage(message));
其中queueClient是我的全局CloudQueueClient实例。正如您所看到的,我仍然在每次调用时都创建了一个CloudClient实例。我是否应该为每次通话重复使用CloudClient实例。
我的问题很简单,在Web API应用程序的上下文中使用CloudQueueClient和CloudQueue的正确方法是什么?
请注意,我将传入的设备消息分布在多个队列中,以减轻每个队列的负载,从而不会受到限制。