为什么 Orchard 在执行内容项查询时如此慢?

2024-05-11

假设我想查询所有 Orchard 用户 ID,并且还想包括那些已被删除(也称为软删除)的用户。该数据库包含大约 1000 个用户。

Option A - 大约需要 2 分钟

Orchard.ContentManagement.IContentManager lContentManager = ...;

lContentManager
  .Query<Orchard.Users.Models.UserPart, Orchard.Users.Models.UserPartRecord>(Orchard.ContentManagement.VersionOptions.AllVersions)
  .List()
  .Select(u => u.Id)
  .ToList();

Option B- 执行与几乎察觉不到的延迟

Orchard.Data.IRepository<Orchard.Users.Models.UserPartRecord> UserRepository = ...;

UserRepository .Fetch(u => true).Select(u => u.Id).ToList();

使用选项 A 时,我没有看到 SQL Profiler 中执行任何 SQL 查询。我猜这与 NHibernate 或缓存有关。

有什么办法可以优化Option A?


难道是因为IContentManager版本正在通过访问数据InfoSet(基本上是数据的 xml 表示),其中IRepository版本使用实际的数据库表本身。

我似乎记得读过,虽然 Infoset 在很多情况下都很棒,但当您通过排序/过滤处理较大的数据集时,直接访问表会更有效,因为使用 Infoset 需要解析每个 xml 片段并提取元素在获取数据之前。

自“转变”以来,Orchard 同时使用这两种方法,因此您可以使用最适合您需求的方法。我现在找不到解释它的文章,但这很好地解释了转变和信息集:

http://weblogs.asp.net/bleroy/the-shift-how-orchard-painless-shifted-to-document-storage-and-how-it-ll-affect-you http://weblogs.asp.net/bleroy/the-shift-how-orchard-painlessly-shifted-to-document-storage-and-how-it-ll-affect-you

希望对您有帮助吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Orchard 在执行内容项查询时如此慢? 的相关文章

随机推荐