代码之家  ›  专栏  ›  技术社区  ›  Adam McKee

(Commerce Server)如何在不实例化新MarketingContext对象的情况下获取页面组[]

  •  0
  • Adam McKee  · 技术社区  · 16 年前

    如果你看看 Tom Schultz's Blog ,您将看到,他说,如果您实例自己的上下文对象(例如CommerceContext对象),那么SiteConfigReadOnlyFreeThreaded类的实例也会在内存中创建,并且您不能做任何事情来破坏它。如果这样做的次数足够多,最终会在应用程序日志中收到警告。以下是警告的内容:

    Commerce Server运行时检测到已创建SiteConfigReadOnlyFreeThreaded对象的#个以上实例。创建许多SiteConfigReadOnlyFreeThreaded实例将对站点的性能产生负面影响。有关SiteConfigReadOnlyFreeThreaded对象的建议使用,请参阅Commerce Server文档。

    您还将看到Tom建议使用上下文对象的Current属性来避免此错误,如下所示:

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

    这样做会重新使用相同的singleton实例,以避免每次实例新CommerceContext类时重新创建SiteConfigReadOnlyFreeThreaded对象。

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

    真正地

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

    正如您所看到的,我正在创建一个MarketingContext类,每次调用它时(经常调用),它也会在内存中创建一个SiteConfigReadOnlyFreeThreaded。

    有没有一种方法可以在每次我想做的时候,在不实例化一个全新的MarketingContext对象的情况下获得所有页面组的配置列表?

    1 回复  |  直到 16 年前
        1
  •  0
  •   Adam McKee    16 年前

    我做了一些挖掘,发现如下:

    默认情况下,Microsoft将这些警告的阈值(即使在错误日志中出现)设置为100。事实证明,如果这些警告持续保持在100以下,那么它们绝对是良性的。

    推荐文章