mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
#20909: Fix Content Manager Query Performance without Record
Work Item: 20909
This commit is contained in:

committed by
agriffard

parent
ccec5fd330
commit
12285abca8
@@ -1,5 +1,6 @@
|
||||
using Orchard.Caching;
|
||||
using Orchard.ContentManagement;
|
||||
using Orchard.ContentManagement.MetaData;
|
||||
using Orchard.DisplayManagement.Implementation;
|
||||
using Orchard.Templates.Models;
|
||||
using System;
|
||||
@@ -15,17 +16,20 @@ namespace Orchard.Templates.Services {
|
||||
private ICacheManager _cacheManager;
|
||||
private ISignals _signals;
|
||||
private IContentManager _contentManager;
|
||||
private IContentDefinitionManager _contentDefinitionManager;
|
||||
private ITemplateService _templateService;
|
||||
|
||||
public TemplateShapeBindingResolver(
|
||||
ICacheManager cacheManager,
|
||||
ISignals signals,
|
||||
IContentManager contentManager,
|
||||
IContentDefinitionManager contentDefinitionManager,
|
||||
ITemplateService templateService
|
||||
) {
|
||||
_cacheManager = cacheManager;
|
||||
_signals = signals;
|
||||
_contentManager = contentManager;
|
||||
_contentDefinitionManager = contentDefinitionManager;
|
||||
_templateService = templateService;
|
||||
}
|
||||
|
||||
@@ -54,7 +58,14 @@ namespace Orchard.Templates.Services {
|
||||
return _cacheManager.Get("Template.ShapeProcessors", ctx => {
|
||||
ctx.Monitor(_signals.When(DefaultTemplateService.TemplatesSignal));
|
||||
|
||||
var allTemplates = _contentManager.Query<ShapePart>().List();
|
||||
// select all name of types which contains ShapePart
|
||||
var typesWithShapePart = _contentDefinitionManager
|
||||
.ListTypeDefinitions()
|
||||
.Where(ct => ct.Parts.Any(cp => cp.PartDefinition.Name == "ShapePart"))
|
||||
.Select(ct => ct.Name)
|
||||
.ToArray();
|
||||
|
||||
var allTemplates = _contentManager.Query<ShapePart>(typesWithShapePart).List();
|
||||
|
||||
return allTemplates.Select(x => new TemplateResult {
|
||||
Name = x.Name,
|
||||
|
@@ -53,6 +53,7 @@ namespace Orchard.Widgets.Filters {
|
||||
|
||||
// Once the Rule Engine is done:
|
||||
// Get Layers and filter by zone and rule
|
||||
// NOTE: .ForType("Layer") is faster than .Query<LayerPart, LayerPartRecord>()
|
||||
IEnumerable<LayerPart> activeLayers = _orchardServices.ContentManager.Query<LayerPart>().ForType("Layer").List();
|
||||
|
||||
var activeLayerIds = new List<int>();
|
||||
|
@@ -72,7 +72,7 @@ namespace Orchard.Widgets.Services {
|
||||
|
||||
public IEnumerable<WidgetPart> GetWidgets(int[] layerIds) {
|
||||
return _contentManager
|
||||
.Query<WidgetPart>()
|
||||
.Query<WidgetPart, WidgetPartRecord>()
|
||||
.WithQueryHints(new QueryHints().ExpandParts<CommonPart>())
|
||||
.Where<CommonPartRecord>(x => layerIds.Contains(x.Container.Id))
|
||||
.List();
|
||||
|
Reference in New Issue
Block a user