【问题标题】:Keep Big Object List in memory or Read From File .NET将大对象列表保存在内存中或从文件 .NET 中读取
【发布时间】:2012-01-26 18:18:58
【问题描述】:

我需要读取一个对象的大列表(每个对象包含 2 个字符串和 1 个 Int32)(我从 XML 网页中提取这些对象),它应该包含大约 10000 个对象。

我需要从这个列表中每分钟获取大约 20 条记录。

我会知道是否就性能和内存安全而言,最好将此 List 保存在内存中并获取这 20 条记录(每分钟)或从 WebPage 下载 The Xml ,每分钟从本地磁盘读取并找到那些20 条记录。

也可以接受任何其他解决方案:)

更新:忘了说我说的是 Winform C# 应用程序

【问题讨论】:

    标签: winforms performance list memory


    【解决方案1】:

    优化的第一条规则是在优化之前进行测量。

    当您将所有对象加载到内存中时,它会消耗多少内存?您的应用程序的其余部分需要多少内存?机器有多少内存?您是在 32 位还是 64 位地址空间中运行?任何其他必需的应用程序同时需要多少内存?

    回答完这些问题后,您就可以开始分解优化方法了。在这种情况下,您每分钟需要 20 条记录,有 20 条记录吗?您是否需要遍历所有 10,000 个才能找到 20 个? XML 文件多久更改一次?

    附:查看用于解析 XML 文件的 XmlReader 与 XmlDocument。

    【讨论】:

    • 问题是机器有 512 最大 1GB 内存并且大部分时间是 VirtualMachine。它在 32 位上运行。是的,我需要迭代 1000 才能找到 20 条记录(但不是任何 20 条,我需要根据 ID 字段选择它们。Xml 每 15-20 分钟更改一次
    • 目前我正在使用 XmlDocument ,但我也会看到 XmlReader。
    • 感谢我阅读了有关 XmlDocument 的信息,我必须在我的情况下使用 XmlReader!现在的问题是......我怎样才能改变 XmlReader 中的所有内容?:)
    • 当您将整个 XML 文件解析为比 XmlDocument 更高效的数据结构时,您使用了多少内存?查看 XmlWriter 以修改输入 XML 文件。
    【解决方案2】:

    为了性能,最好避免磁盘 I/O。

    对于内存,两种解决方案都是相同的,除非您一次处理文件一行(这将提供可怕的性能,因为您将无法对结果进行散列/索引)。

    如果有“钥匙”,我会将它们保存在字典中。

    如有疑问,请提供个人资料。

    【讨论】:

      猜你喜欢
      • 2016-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多