2013-02-20 36 views
1

覆蓋Sitecore的鏈接提供程序後,CPU出現峯值。我們正在重寫GetItemUrl以獲取某些類型模板的別名url,並且當唯一擊中該網站的頁面是keepalive頁面時,它會達到CPU的80%。重寫Sitecore的鏈接提供程序時出現CPU峯值

這是默認的鏈接提供的配置行工作正常:

<add name="sitecore" type="Sitecore.Links.LinkProvider, Sitecore.Kernel" addAspxExtension="false" alwaysIncludeServerUrl="false" encodeNames="true" languageEmbedding="never" languageLocation="filePath" shortenUrls="true" useDisplayName="false" /> 

這是我們自定義鏈接提供的配置行尖峯CPU:

<add name="sitecore" 
type="Library.Pipelines.CustomLinkProvider, Library" 
addAspxExtension="false" 
alwaysIncludeServerUrl="false" 
encodeNames="true" 
languageEmbedding="never" 
languageLocation="filePath" 
shortenUrls="true" 
useDisplayName="false" /> 

的CustomLinkProvider類:

public class CustomLinkProvider : LinkProvider 
{ 
    public override string GetItemUrl(Item item, UrlOptions options) 
    { 
     // check if item is factsheet or story, if it is then get the alias url 
     if (item.TemplateID == ItemConstants.Pages.Factsheet.TemplateID 
     || item.TemplateID == ItemConstants.Pages.Story.TemplateID) 
     { 
      if (Sitecore.Context.Database != null) 
      { 
       if (SitecoreHelpers.HasAlias(item, Sitecore.Context.Database)) 
       { 
        Item alias = SitecoreHelpers.GetAlias(item, Sitecore.Context.Database); 
        string friendlyUrl = alias.Name; 
        return friendlyUrl; 
       } 
      } 
     } 
     return base.GetItemUrl(item, options); 
    } 
} 

這是GetAlias函數:

public static Item GetAlias(Item currentItem, Database database) 
{ 
    Item aliasFolder = database.GetItem(ItemConstants.Common.SystemAliasFolder); 

    Item alias = 
     aliasFolder.Children.FirstOrDefault(
     x => ((LinkField) x.Fields["Linked item"]).TargetID == currentItem.ID); 

    return alias; 
} 

任何人都知道爲什麼這會刺激CPU?目前有大約600個別名,但我不認爲這會導致如此大的高峯。

+0

是你不使用配置文件? – 2013-02-20 22:51:45

回答

6

我猜測它是HasAlias和GetAlias的組合導致你的問題。迭代600個sitecore項目確實會導致CPU高峯,特別是有可能多次調用鏈接提供者。諸如ANTS的分析器將允許您確認。

我會建議不要每次調用都這樣做,而是讀取所有別名並緩存與您的項目關聯的數據結構。當添加,編輯或刪除別名時,您需要清除緩存,但這會爲您節省大量的CPU週期。

+0

謝謝,我不認爲這會產生如此巨大的影響,但會緩存它。 :) – annelie 2013-02-21 01:01:07

+0

我同意,確實是一個很好的解決方案! – 2013-02-21 14:22:07