C# 这对整个网站来说是全球性的吗?

C# 这对整个网站来说是全球性的吗?,c#,asp.net,xpath,xml-parsing,C#,Asp.net,Xpath,Xml Parsing,我需要将一个xml文件加载到内存中,并使其在整个站点上全局可用。这段代码完成了吗 如果是这样,将来如何更新这个“缓存”版本 XPathDocument ConvProductDoc; ConvProductDoc = Cache["doc"] as XPathDocument; if (ConvProductDoc == null) { ConvProductDoc = new XPathDocument(HttpContext.Current.Request.

我需要将一个xml文件加载到内存中,并使其在整个站点上全局可用。这段代码完成了吗

如果是这样,将来如何更新这个“缓存”版本

XPathDocument ConvProductDoc;

    ConvProductDoc = Cache["doc"] as XPathDocument;
    if (ConvProductDoc == null) {
        ConvProductDoc = new XPathDocument(HttpContext.Current.Request.MapPath(@"\data\foo\bar\my.xml"));
        Cache.Insert("doc", ConvProductDoc);
    }

如果您的网站仅在一台服务器上,则是

如果您的网站分布在多个服务器上,则不会。 缓存密钥和数据仅在存储它的服务器上可用


例如,如果您的服务器位于Amazon EC2中,则可以使用ElastiCache,以确保缓存在分布式服务器环境中可用。

是的,ASP.NET
缓存对象是站点范围的。管理
缓存
和设置过期规则等有很多选项

要分配/更新
缓存中的值
,只需将其设置为任何
字典
哈希表
值:

Cache["doc"] = newValue;

您可以在MSDN文档中阅读更多有关
缓存
对象的信息:

取决于
缓存是什么以及您的站点是如何配置的。好的,请原谅我的无知,是否有一个链接可以进一步解释您的建议?明白了,是的,这是有意义的,对我来说,是一个给定的链接。这样就好了。那么简单的回答是“是的,仅在该服务器上”?我认为我在六台服务器之间实现了负载平衡(该页面每天有5千次点击)。@Jimmmy,因此
缓存是一个正确的选择,它“在一个池上”而不是在一台服务器上,因为如果您有web garden(更多池运行),那么每个池都有自己的缓存。@SoftwareSpint在下面对分布在多台服务器上的站点进行了说明,但是,ASP.NET具有跨多台服务器管理缓存的内置机制。这篇文章可能会有帮助:关于新文件检测呢?我确信这是可能的,对吗?是的,您当然可以使用
FileSystemWatcher
来监视文件,但是这将是您必须使用的一个单独的操作-您将监视文件,然后根据文件的更改手动更新
缓存。你需要考虑文件的位置在哪一个服务器上,或者其中的任何一个?您可以阅读有关
FileSystemWatcher
的更多信息。实际上,否,缓存对象是每个池的,如果您在同一台计算机上使用两个池来运行站点,则您有两个不同的缓存对象。@BrianS是的,如果您搜索web garden,您会看到如何操作。在web garden和web farm的情况下,只有文件系统(和/或公共数据库)可以在应用程序之间真正相同。