XmlReader如何从内存而非磁盘执行此操作

本文关键字:磁盘 执行 操作 内存 XmlReader | 更新日期: 2023-09-27 18:00:51

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

  1. 每次调用XmlReader都会调用磁盘内存,这是真的吗
  2. 如果是,如何使用服务器内存而不是磁盘内存执行此操作

XmlReader如何从内存而非磁盘执行此操作

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

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

这是真的吗?

我们不知道这是否是导致服务器瘫痪的原因。但是的,它每次都会从磁盘上读取,至少在名义上是这样——不过,如果文件被大量读取,我希望文件系统会缓存该文件。

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

如果你的意思是"从内存而不是从磁盘",如果它总是相同的路径,那么我建议你只将文档加载到内存中一次,例如

XDocument doc = XDocument.Load(path);

然后在所有请求中重用它。只要你只是阅读它,它应该是好的。如果需要,您可以从文档创建一个新的阅读器,或者直接使用XDocument(这可能更简单(。如果需要,也可以从XmlReader加载XDocument

使用

XmlReader.Create(Stream)

过载。然后使用FileStream将文件的内容读取到MemoryStream中(仅一次!(,然后杀死FileStream并只使用MemoryStream。

只需记住,每次使用它创建XmlReader时,都要将流的位置设置为0,这意味着一次只能从中读取1个XmlReader。

如果你运行的是网络服务器(asp.net(,你需要缓存MemoryStream(Page.cache(。或者,如果内存占用不太严重,你可以在Session中按用户缓存。在会话中,您也不必担心多个读取器访问。