【发布时间】:2011-05-18 16:18:50
【问题描述】:
我正在用 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 个查询对象),每个查询有不同数量的检索到的文档,总共 6284293 个。我需要这个层次结构来进行一些计算(平均精度、主题易用性、系统平均平均精度、相关性)。这就是 TREC 的工作原理...
【问题讨论】:
-
这听起来相当合理,大小明智。
-
6284293 documents是否意味着您有 6284293 个对象? -
@Gabe: 是的,这个数字是所有导入文件的总行数(约 130 个 txt 文件),并且为每一行创建一个“文档”类型的对象...
-
所以大约 7M 个对象,每个大约 100 字节,给你大约 700MB。那你有什么问题?
-
@Gabe:我问这个是因为我不是大师。
标签: c# performance forms memory-leaks memory-management