XmlReader如何从内存而不是磁盘上做到这一点

时间:2013-02-22 17:43:22

标签: c# asp.net xml-parsing

我正在使用XmlReader ProductDoc = XmlReader.Create(path, settings);,显然它正在关闭服务器,因为每次使用搜索工具的用户都会从磁盘读取。

  1. 是不是每次调用XmlReader都会调用磁盘内存?
  2. 如果是这样,我怎么能从服务器内存而不是磁盘内存中执行此操作

3 个答案:

答案 0 :(得分:2)

  1. 是的,您的代码将从磁盘读取。

  2. 听起来您需要将数据放在服务器上的缓存中。这将涉及将文档作为XDocument或原始数据读取,并将其放入Page.Cache

答案 1 :(得分:1)

  

这是真的吗?

嗯,我们不知道这是否会影响您的服务器。但是,是的,它每次都会从磁盘读取它,至少在概念上 - 我希望文件系统缓存文件,如果它被大量读取的话。

  

如何从服务器内存而不是磁盘内存中执行此操作

如果您的意思是“从内存而不是从磁盘”和如果它始终是相同的路径,那么我建议您只需将文档加载到内存中一次,例如

XDocument doc = XDocument.Load(path);

...然后在所有请求中重复使用它。只要您从中读取,就应该没问题。如果需要,您可以从文档中创建新的阅读器,或者直接使用XDocument(这可能更简单)。如果您愿意,可以从XDocument加载XmlReader

答案 2 :(得分:0)

使用

XmlReader.Create(Stream)

过载。然后使用FileStream将文件内容读入MemoryStream(仅限ONCE!),然后终止FileStream并使用MemoryStream。

请记住每次使用它创建XmlReader时将流的位置设置为0,这意味着只有1个XmlReader可以一次读取它。

如果您正在运行Web服务器(asp.net),则需要缓存MemoryStream(Page.Cache)。或者,如果内存占用不是太可怕,您可以在Session中基于每个用户缓存它。在Session中,您也不必担心多个读者访问。