Sitecore のリンク プロバイダーをオーバーライドした後、CPU が急上昇します。特定のタイプのテンプレートのエイリアス URL を取得するために GetItemUrl をオーバーライドしています。ウェブサイトにアクセスするのがキープアライブ ページだけの場合、CPU の 80% まで使用されます。
これは正常に動作するデフォルトのリンク プロバイダーの構成行です。
<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 のエイリアスがありますが、これほど大きなスパイクが発生するとは思いません。