【问题标题】:NHibernate Profiler - cached entitiesNHibernate Profiler - 缓存实体
【发布时间】:2011-05-18 08:20:10
【问题描述】:

我刚刚实现了 SysCache2 并为我的解决方案中的一些实体激活了缓存。 一切正常,但我确实有一个问题:

有时当我浏览特定页面时,NHibernate Profiler 会显示正在获取的缓存实体数量非常多。几百个缓存的实体应该是相当数量的,但有时会达到 3000-5000 个。见下图。

在这种情况下,是否真的从缓存中获取了 5002 个实体,或者 NHibernate Profiler 中是否存在打印错误?

加载方面,一切正常。页面请求已完成,但分析器不断计算越来越多的缓存实体。

任何人都经历过类似的事情,或者这真的发生过吗?

【问题讨论】:

    标签: c# asp.net nhibernate profiler


    【解决方案1】:

    嗯,它确实在获取所有条目。此外,您的屏幕截图已被裁剪,但我假设您收到来自 NHProf 的警报,指出缓存调用过多。

    NH 有两种不同类型的缓存:查询缓存和实体缓存。查询缓存只存储查询产生的项目的身份(即没有数据)。然后 NH 必须按 ID 从实体缓存中单独获取项目。

    更多信息请访问:http://ayende.com/blog/3112/nhibernate-and-the-second-level-cache-tips

    请注意,这可能会影响网络服务器的性能。我的情况与您完全相同,并且为这些实体禁用二级缓存时效果更好。

    此外,由于 appender 和 NHProf 之间存在一些延迟,即使在页面加载后,它也会继续显示新条目。 appender 将所有日志发送到 NProf,它需要一些时间来绘制所有信息。

    【讨论】:

    • 问题是我每次创建会话时都初始化分析器。现在缓存的实体可以正确显示了。
    • 顺便问一下psousa,为什么不启用缓存的情况下效果更好?
    • 这很简单。我的应用程序服务器是一个非常基本的虚拟机,没有太多 RAM 或 CPU。数据库服务器是一台功能强大的物理机器,具有良好的规格。在我的负载测试期间,有几个用户获取和写入信息,启用缓存后 CPU 轻松达到 100%,因为某些屏幕从缓存中加载了数千个项目。就像我上面所说的那样,NHProf 本身会警告您不要从缓存中加载太多项目。我什至使用 DotTrace 分析了执行,它确实花费了很多时间从二级缓存中获取和写入。
    • 我正在使用 SysCache2,因此缓存未分发。 NHibernate 只在分布式环境中发出警告。但我会密切注意 CPU 的使用情况。该网站仍然很慢,但它可能取决于 Telerik Web 控件的所有渲染 :-)
    猜你喜欢
    • 2011-08-15
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多