我正在C#中构建一个windows窗体应用程序,它从数百个文件读取并创建一个对象层次结构。特别是:我有严重的内存泄漏问题吗?
DEBUG[14]: Imported 129 system/s, 6450 query/s, 6284293 document/s.
总和是我创建的对象的总数。对象很简单,只是一些int/string属性和强类型列表里面。
问题:正常,我的应用程序正在消耗大约700MB的内存(在调试模式下)?我该如何减少内存使用量?
编辑:这就是为什么我有6284293个对象,如果你只是好奇。想象一下,一个叫做“系统”的搜索引擎。一个系统里面有更多的查询。
public class System
{
public List<Query> Queries;
}
每个查询对象都是指“主题”;这是主要论点(例如,搜索“意大利周末”)。据哈检索文档的列表内:
public class Query
{
public Topic Topic; // Maintain only a reference to the topic
public List<RetrievedDocument> RetrievedDocuments;
public System System; // Maintain only a reference to the system
}
每个检索到的文档具有得分和排名,并有主题文档的引用:
public class RetrievedDocument
{
public string Id;
public int Rank;
public double Score;
public Document Document;
}
每个主题都有内部的文档的集合,可以是相关的或不相关的,并且它的父主题的引用:
public class Topic
{
public int Id;
public List<Document> Documents;
public List<Document> RelevantDocuments
{
get {return Documents.Where(d => d.IsRelevant());}
}
}
public class Document
{
public string Id;
public bool IsRelevant;
public Topic Topic; // Maintain only a reference to the topic
}
有129个系统中,50周主要的主题(129 * 50 = 6450查询对象),每个查询具有一个diff检索到的文件数量达到6284293件。我需要这个层次来做一些计算(平均精度,主题易用性,系统平均精度,相关性)。这是TREC如何工作...
这听起来相当合理,尺寸明智。 – AHungerArtist 2010-12-01 18:24:58
`6284293文档是否意味着您有6284293个对象? – Gabe 2010-12-01 18:25:29
@Gabe:是的,这个数字是所有文件导入的总行数(约130个txt文件),并且对于每一行创建一个类型为“Document”的对象... – gremo 2010-12-01 19:02:30