我有一个非常奇怪的问题。 使用spquery时,我正在使用对象缓存更快地检索结果。

获取项目的代码如下:

PortalSiteMapProvider ps = PortalSiteMapProvider.CurrentNavSiteMapProviderNoEncode;
var items = ps.GetCachedListItemsByQuery(((PortalSiteMapNode)ps.CurrentNode).WebNode, "mylistname", myQuery, site.RootWeb);
.

当我运行此代码时,我得到满足查询中条件的所有结果(无论我刷新页面有多少次)。但是,如果我对列表进行任何更改(添加或删除项),则对象缓存只返回一次更改的项目集。下次我刷新页面我得到0结果。

e.g。如果我有5个项目,那么我添加了1个新项目,我得到6个是正确的结果。但是当我再次刷新页面时,我得到0个结果。此状态仍然存在,直到我回收应用程序池或刷新对象缓存。

我的对象缓存设置为300MB,它在执行查询时检查更改并将乘法器值设置为3。

任何想法如何成为我问题的来源?

任何建议都受到欢迎!谢谢。

编辑:

我看过uls,发现这个条目返回0项:

Cache miss for query Web (nor all entries not found) "query .... "
Fetching 4294967295 items.
Fetching super user items.
Fetching SuperReader items.
Merging super user and super reader items.
Cache Hit for query Web "query ... "
Creating result set.
Adding super user IDs.
Adding Super Reader IDs.
Nothing from SuperReaders.
.

有帮助吗?

解决方案

“查询Web的缓存未命中”可能是答案。您可能正在查看错误部分的ULS日志。我会查看ULS日志,以获得第一个成功的运行,看看是否没有缓存未命中的列表,导致您正在查询列表的缓存转储。

您可以通过将查询从服务器端更改为客户端来补救。如果我记得正确的客户端查询往往会在运行查询之前倾向于拉动整个列表,所以我认为每次都可以获得缓存点击。

其他提示

缓存未命中主要可能发生由于内存不足,因为它们都存储在RAM中。如果不是,则主要导致必须执行缓存配置。我建议尝试为对象缓存指定的不同设置,例如在Web.config中直接在Web.config等中转换最大化等。

http://technet.microsoft.com/en-us/library/cc770229(移动===== 0.14).aspx

还确保对象缓存用户帐户配置正确地如下文章中提到,

http://technet.microsoft.com/en-us/library/ff758656(移动=办法.14).aspx

我认为不确定这是对缓存配置文件的影响 修改项目使缓存脏,这就是为什么您的下一个请求都不会给您放弃。因为对象不再有效 看起来并使用缓存配置文件设置..有一个互联网和外联网或匿名网或匿名的夫妇

sunchero

许可以下: CC-BY-SA归因
scroll top