我正在使用XmlReader ProductDoc = XmlReader.Create(path, settings);
,显然它正在关闭服务器,因为每次使用搜索工具的用户都会从磁盘读取。
答案 0 :(得分: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中,您也不必担心多个读者访问。