【发布时间】:2015-10-01 08:07:17
【问题描述】:
我有一个 WCF,它由 ASP.NET 应用程序每 10-15 分钟调用一次,以通过电子邮件通知客户有关内容。我需要该集合来识别邮件已发送给哪个用户。因此,如果下一个电话打进来,我可以查询这个集合,如果邮件是在之前发送的以及最后一次是什么时候发送的(我设置了一个间隔,这样用户就不会每 10-15 分钟收到一次邮件)。
我的问题是 - 当我将它存储在全局时,这个集合是否会在呼叫结束时过期(集合 = 空)? 将 .svc 类中的这个全局集合设置为静态 List 就足够了,还是我必须设置 DataMember 属性? 代码将如何查找?
喜欢吗?
public class Service1 : IService1
{
private static List<customer> lastSendUserList = new List<customer>();
void SendMail(int customerid)
{
lastSendUserList.FirstOrDefault(x => x.id == customerid);
.
// proof date etc. here and send or send not
}
}
这个lastSendUserList留在内存/缓存中,直到我将它设置为null(或服务器重启等),这样我每次来电时都可以查询它?还是每次通话结束时 gc 都会清除此列表?
编辑
所以新代码应该是这样的?!
public class Service1 : IService1
{
private static List<customer> lastSendUserList = new List<customer>();
void SendMail(int customerid, int setInterval)
{
customer c;
c = lastSendUserList.FirstOrDefault(x => x.id == customerid);
if(c != null && c.lastSendDate + setInterval > DateTime.Now)
{
lastSendUserList.Remove(x => x.id == c.id);
// start with sending EMAIL
lastSendUserList.Add(new customer() { id = customerid, lastSendDate = DateTime.Now });
}
}
}
【问题讨论】:
标签: c# wcf garbage-collection global-variables ram