【发布时间】:2013-02-08 23:36:38
【问题描述】:
我有一个 WCF 客户端,我连接到托管在 Windows 服务中的 WCF 服务器。在服务中,我从安全事件日志中读取了最后一天的条目。然后我解析条目并创建我自己的List<Data>,我将其返回到我的 WCF 客户端以在 DataGrid 中显示它。问题是,在安全事件日志中,我有 30000 个条目,在解析每个条目后,我创建了 30000 个 Data 类型的新对象。此类型是一个具有 15 个字符串属性的类,其中包含来自事件日志的消息的详细信息。整个过程结束后,Windows 服务的内存使用量上升了 60-70MB。一旦我向客户端发送了这么多数据集,如何才能将 Windows 服务使用的内存从 70-80MB 降低到默认的 10MB?
这是我的代码:
public List<Data> GetConnections()
{
var eventLog = new EventLog("Security");
var fromDate = DateTime.Now.AddDays(-1);
var entries = (from EventLogEntry e in eventLog.Entries
where (e.InstanceId == m_EventNumber) && e.TimeGenerated >= fromDate orderby e.TimeGenerated
select e).ToList()
.OrderByDescending(x => x.TimeGenerated);
var items = new List<Data>();
foreach(var item in entries)
{
var nData = ParseMessage(item.Message);
if (nData != null)
items.Add(ruleData);
}
return items;
}
【问题讨论】:
-
attribute设置的服务SessionMode的设置是什么?
-
SessionMode = SessionMode.Required
-
好的,
ServiceBehaviorAttribute.InstanceContextMode? -
InstanceContextMode=InstanceContextMode.Single
-
尝试使用这个参数。单身意味着单身人士。 PerCall 将销毁服务对象及其引用的所有实例。什么可以获得一些 GC 性能。买也不一定。
标签: c# windows wcf memory-management event-log