Dear Dynamicweb,
We have a solution with a lot of products and a lot of assortments where we see some critical performance issues with missing cache then using this method: InternalHasAccessToProduct. This is tested on 9.9.6
Please see the call stack here: DECLARE @p0 NVARCHAR(12) = N'NL0000000815' SELECT * FROM EcomAssortmentPermissions WHERE AssortmentPermissionAssortmentID = @p0 System.Data.IDataReader CreateDataReader(System.Data.IDbCommand, System.Data.CommandBehavior) (Dynamicweb.Data.dll) in :0 System.Data.IDataReader CreateDataReader(Dynamicweb.Data.CommandBuilder, System.Data.IDbConnection, System.Data.IDbTransaction, System.Data.CommandBehavior, Int32) (Dynamicweb.Data.dll) in :0 System.Data.IDataReader CreateDataReader(Dynamicweb.Data.CommandBuilder, System.Data.IDbConnection, System.Data.IDbTransaction, Int32) (Dynamicweb.Data.dll) in :0 System.Collections.Generic.IEnumerable`1[Dynamicweb.Ecommerce.Assortments.AssortmentPermission] GetAssortmentPermissions(System.String) (Dynamicweb.Ecommerce.dll) in :0 System.Collections.Generic.Dictionary`2[System.Int32,Dynamicweb.Ecommerce.Assortments.AssortmentPermission] LoadAssortmentPermissions(System.String) (Dynamicweb.Ecommerce.dll) in :0 System.Collections.Generic.IEnumerable`1[System.String] GetAssortmentIdsByUser(Dynamicweb.Security.UserManagement.User, System.String, Boolean) (Dynamicweb.Ecommerce.dll) in :0 Boolean InternalHasAccessToProduct(Dynamicweb.Ecommerce.Products.Product, Dynamicweb.Security.UserManagement.User) (Dynamicweb.Ecommerce.dll) in :0 Boolean HasAccessToProduct(Dynamicweb.Ecommerce.Products.Product) (Dynamicweb.Ecommerce.dll) in :0 Dynamicweb.Ecommerce.Products.Product GetProductById(System.String, System.String, System.String, Boolean) (Dynamicweb.Ecommerce.dll) in :0 Dynamicweb.Ecommerce.Products.Product GetProductById(System.String, System.String, System.String) (Dynamicweb.Ecommerce.dll) in :0 Dynamicweb.Ecommerce.Products.Product get_Product() (Dynamicweb.Ecommerce.dll) in :0 Dynamicweb.Ecommerce.Orders.OrderLineCollection GetProductOrderLines(Boolean) (Dynamicweb.Ecommerce.dll) in :0 Dynamicweb.Ecommerce.Prices.PriceInfo FindPrice(Boolean) (Dynamicweb.Ecommerce.dll) in :0 Dynamicweb.Ecommerce.Prices.PriceInfo get_UnitPrice() (Dynamicweb.Ecommerce.dll) in :0 Dynamicweb.Ecommerce.Prices.PriceInfo get_Price() (Dynamicweb.Ecommerce.dll) in :0 Void RenderOrderLine(Dynamicweb.Ecommerce.Orders.OrderLine, Dynamicweb.Rendering.Template) (Dynamicweb.Ecommerce.dll) in :0 Void RenderOrderLines(Dynamicweb.Ecommerce.Orders.OrderLineCollection, Dynamicweb.Rendering.Template, System.String) (Dynamicweb.Ecommerce.dll) in :0 Void RenderOrderDetails(Dynamicweb.Rendering.Template, Dynamicweb.Ecommerce.Orders.Order, Boolean, Dynamicweb.Ecommerce.Orders.OrderTemplateExtenderContext) (Dynamicweb.Ecommerce.dll) in :0 Void RenderOrder(Dynamicweb.Ecommerce.Orders.Order, Dynamicweb.Rendering.Template, Boolean, Int32, Dynamicweb.Ecommerce.Orders.OrderTemplateExtenderContext) (Dynamicweb.Ecommerce.dll) in :0 Void ExtendTemplate(Dynamicweb.Rendering.Template) (Dynamicweb.Ecommerce.dll) in :0 Void RenderPageTemplateExtenders(Dynamicweb.Rendering.Template) (Dynamicweb.dll) in :0 Void RenderPage(Dynamicweb.Rendering.Template, Dynamicweb.Frontend.PageViewModel) (Dynamicweb.dll) in :0 Void SetPageTemplateValues() (Dynamicweb.dll) in :0 System.String Output() (Dynamicweb.dll) in :0 Void ProcessRequest(System.Web.HttpContext) (Dynamicweb.dll) in :0
Can you please try to look into this as soon as possible?
Best regards, Anders