簡體   English   中英

(Commerce Server)如何在不實例化新的MarketingContext對象的情況下獲取PageGroup []

[英](Commerce Server) How to get the PageGroup[] without instancing a new MarketingContext object

如果查看Tom Schultz的Blog ,您會發現他說如果您實例化自己的Context對象(例如CommerceContext對象),那么也會在內存中創建SiteConfigReadOnlyFreeThreaded類的實例,並且您不能做任何破壞它的事情。 如果這樣做足夠多次,最終您將在應用程序日志中收到警告。 這是警告的樣子:

Commerce Server運行時檢測到已創建了#個以上的SiteConfigReadOnlyFreeThreaded對象實例。 創建許多SiteConfigReadOnlyFreeThreaded實例會對站點的性能產生負面影響。 請參考Commerce Server文檔以獲取對SiteConfigReadOnlyFreeThreaded對象的推薦使用。

您還將看到Tom表示要使用Context對象的Current屬性來避免此錯誤,就像這樣:

ContentSelector cso = CommerceContext.Current.TargetingSystem.SelectionContexts["advertising"].GetSelector();

這樣做會重復使用相同的單例實例,以避免每次您實例化新的CommerceContext類時都重新創建SiteConfigReadOnlyFreeThreaded對象。

到目前為止和我在一起? 好:)

這是我真正想做的事情:獲取在Commerce Server的“市場營銷”部分中設置的所有頁面組的列表。 據我所知,這是唯一的方法:

using (MarketingContext ctx = MarketingContext.Create("MyCommerceSite", "MyMarketingAuthorizationStore", AuthorizationMode.NoAuthorization))
{
    PageGroup[] pageGroups = ctx.PageGroups.GetAllPageGroups();
}

如您所見,我正在創建一個MarketingContext類,該類還在每次調用時也會在內存中創建一個SiteConfigReadOnlyFreeThreaded(這很常見)。

有沒有一種方法可以配置所有頁面組的列表,而無需每次我都想實例化一個全新的MarketingContext對象?

我做了一些挖掘,發現以下內容:

默認情況下,Microsoft將這些警告的閾值設置為甚至在錯誤日志中突然出現的閾值也設置為100。事實證明,如果這些警告的計數始終低於100,則它們是絕對良性的。

就我而言,我已將顯示錯誤的閾值設置為2,以顯示出現的每個實例,而不管它是否是一個有效的關注點。 我已經將上限提高到100,並且到目前為止,我還沒有看到任何不利影響。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM