【问题标题】:Is it better to decode a file and read all, or part, of it?解码文件并读取全部或部分文件会更好吗?
【发布时间】:2013-07-26 09:57:10
【问题描述】:

我有一个完全用 Base64 编码的 XML,而不仅仅是节点文本。对于我的程序的某些功能,我只需要从文件中获取几个节点。 XML 文件可能包含几百个节点,所以我想知道是解码文件并读取几个节点还是读取所有内容以便在程序稍后需要时(如果)更有效?

编辑:当我说 XML 文件包含几百个节点时,子节点并不多,文件可能包含大约该数量的行。

更新:当然,这不仅仅是需要多长时间!如果我在 RAM 中存储超过 500 个字符串,甚至可能不会使用,它会对内存产生什么影响?

【问题讨论】:

  • 正确的问题是:你在乎吗?如果你正在这样做,例如在响应用户单击“加载 XML”时,从 500 毫秒到 250 毫秒将减少 50%——太棒了!但是用户不会注意到,所以没有意义。
  • @Jon 虽然节点实际上读取速度如此之快,但一个 XML 文件可能有 200 - 500 个节点,每个节点具有两个属性...
  • 直觉上我会说它们比这快得多。但正如我所说,你必须回答的第一个问题不是“他们快吗?” ——这是“你在乎吗?”。显而易见的简单解决方案是否足以满足您的需求?如果是,请继续。
  • @Jon - 我手机里的电池现在讨厌你了。
  • @Andy:这类问题只能通过一种方式有效地回答:measure。但是测量是一个复杂的过程,如果不进行定位和改善瓶颈,它是没有意义的。大多数时候人们都在使用他们的直觉而不是衡量甚至考虑瓶颈,这是完全没有意义的(等等等等世界级开发人员的过早优化等等直觉在大多数时候都是错误的等等等等)以及我给出这种类型的原因罐头回应。如果您想要更好的响应,这里是:measure

标签: c# xml performance decode


【解决方案1】:

我敢肯定,如果您的 xml 中的节点很少,那么差异不会很大。

但在体裁中,您可以说这取决于用例。如果您需要大量使用节点,则将所有节点加载到访问速度更快的数据容器(例如字典)中可能会更有效。

原因是字典使用HashTable 来存储数据。关于 HashTable 的上帝的事情是时间复杂度总是 O(1) - 与迭代 xml 的 O(n) 最大复杂度相比总是更好。

【讨论】:

  • 我不认为几百个是“那几个”节点。需要多少节点才能有所作为?
  • 你应该谈论行而不是节点(我不知道你有多少子节点/属性)——这将提供一些关于你的 xml 实际大小的信息。顺便说一句,您写了“少数节点”,所以我推断“那少数”将符合情况
  • 实际上很小;)没有人会注意到差异。
  • 嗯,很有趣。那么什么文件会大到足以产生影响呢?
  • 我会说 50 mb 对于 XML 来说相当大,但这里有一些关于 XML 读取性能的参考 altamiracorp.com/blog/employee-posts/performance-linq-to-sql-vs
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多