XmlReader如何从内存而非磁盘执行此操作
本文关键字:磁盘 执行 操作 内存 XmlReader | 更新日期: 2023-09-27 18:00:51
我使用的是XmlReader ProductDoc = XmlReader.Create(path, settings);
,显然它正在关闭服务器,因为每当用户使用搜索工具时,它都会从磁盘中读取数据。
- 每次调用XmlReader都会调用磁盘内存,这是真的吗
- 如果是,如何使用服务器内存而不是磁盘内存执行此操作
-
是的,您的代码将从磁盘中读取。
-
听起来您需要将数据放入服务器的缓存中。这将涉及到将文档作为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中按用户缓存。在会话中,您也不必担心多个读取器访问。