我创建了一个利用应用程序缓存和WebSockets的C#Asp.NET Web应用程序。当第一个请求来自连接到WebSocket以检索数据的客户端时,Global.asax Application_BeginRequest方法中的代码执行以下操作来启动:
protected void Application_BeginRequest(object sender, EventArgs e){
List<object> objectList = this.Application["NameOfObjectList"] as List<object>;
if (objectList != null)
{
return;
}
// create the list
objectList = new List<object>();
// add list to application cache so it can be used later by an async method
this.Application.Add("NameOfObjectList", objectList);
}
在后来的异步方法中,即连续等待的UDP套接字连接的回调,该方法执行以下操作:
private async Task DecodeData(byte[] udpDatagramData){
// get a copy of the current list of objects from application cache
List<object> objectList = (List<object>)this.Application["NameOfObjectList"];
// decode the udp datagram data and convert it into a object
/* if object list length is greater than set threshold, remove first object */
if (objectList.Count > ObjectCacheLimit)
{
objectList.RemoveAt(0);
}
// add new object to end of list
objectList.Add(object);
// broadcast the object to all WebSocket connected clients
WebSocket.Send(ResponseSerializer.Serialize(object));
// re-cache the object list back into memory
this.Application["NameOfObjectList] = objectList;
}
我在缓存中存储数据的主要原因是当新客户端通过WebSocket连接时,他们可以将内存中当前数据的副本下载到他们的机器上以执行某些操作。因此,我的问题就是这个......
以这种方式将数据拉入/拉出应用程序缓存时是否存在可能的内存泄漏问题或疑虑?我不确定这是否是缓存和更新内存中数据的无效或有害方式。