Why is Orchard so slow when executing a content item query?

有些话、适合烂在心里 提交于 2019-12-07 16:52:01

问题


Lets say i want to query all Orchard user IDs and i want to include those users that have been removed (aka soft deleted) also. The DB contains around 1000 users.

Option A - takes around 2 minutes

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 - executes with almost unnoticeable delay

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

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

I don't see any SQL queries being executed in SQL Profiler when using Option A. I guess it has something to do with NHibernate or caching.

Is there any way to optimize Option A?


回答1:


Could it be because the IContentManager version is accessing the data via InfoSet (basically an xml representation of the data), where as the IRepository version uses the actual DB table itself.

I seem to remember reading that though Infoset is great in many cases, when you're dealing with larger datasets with sorting / filtering it is more efficient to go direct to the table, as using Infoset requires each xml fragment to be parsed and elements extracted before you get to the data.

Since 'the shift', Orchard uses both so you can use whichever method best suits to your needs. I can't find the article that explained it now, but this explains the shift & infosets quite nicely:

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

Hope that helps you?



来源:https://stackoverflow.com/questions/35500449/why-is-orchard-so-slow-when-executing-a-content-item-query

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!