如何提高功能性能,加载时间约为1秒(asp.net mvc 3)

时间:2011-12-15 11:05:37

标签: performance asp.net-mvc-3 loading profiler

我做了一个配置文件跟踪以检查哪些功能需要很长时间,其中一种方法需要大约1秒钟,并且被称为10次以上,我想它应该是审查的候选者。我已经包含了这个方法,任何人都可以告诉我如何才能改进它。

 [NonAction]
    private ProductModel.ProductMiscModel PrepareProductMiscModel(Product product)
    {
        if (product == null)
            throw new ArgumentNullException("product");

        var model = new ProductModel.ProductMiscModel();
        var productVariants = _productService.GetProductVariantsByProductId(product.Id);
        var getManufactureImage = _manufacturerService.GetProductManufacturersByProductId(product.Id)
           .Select(x =>
           {
               var m = x.Manufacturer.ToModel();
               m.PictureModel.ImageUrl = _pictureService.GetPictureUrl(x.Manufacturer.PictureId, _mediaSetting.ManufacturerThumbPictureSize, true);
               m.PictureModel.Title = string.Format(_localizationService.GetResource("Media.Manufacturer.ImageLinkTitleFormat"), m.Name);
               m.PictureModel.AlternateText = string.Format(_localizationService.GetResource("Media.Manufacturer.ImageAlternateTextFormat"), m.Name);
               return m;
           })
           .ToList();
        model.manufactureName = getManufactureImage;
        switch (productVariants.Count)
        {
            case 0:
                {
                    //var productVariant = productVariants[0];
                    model.Sku = null;
                    model.ShowSku = false;
                   // model.attributeName = 0;
                } break;
            case 1:
                //only one variant
                {               var productVariant = productVariants[0];
                                model.Sku = productVariant.Sku; //null;
                                model.ShowSku = true;
                               // model.attributeName = _productAttributeService.GetProductVariantAttributesByProductVariantId(productVariant.Id);
                                model.productSpecification = _specificationAttributeService.GetProductSpecificationAttributesByProductId(productVariant.Product.Id);
                }
                break;

        }

        return model;
    }

_manufactureService.GetProductManufactureByProductId

public virtual IList<ProductManufacturer> GetProductManufacturersByProductId(int productId, bool showHidden = false)
    {
        if (productId == 0)
            return new List<ProductManufacturer>();

        string key = string.Format(PRODUCTMANUFACTURERS_ALLBYPRODUCTID_KEY, showHidden, productId);
        return _cacheManager.Get(key, () =>
                                          {
                                              var query = from pm in _productManufacturerRepository.Table
                                                          join m in _manufacturerRepository.Table on
                                                              pm.ManufacturerId equals m.Id
                                                          where pm.ProductId == productId &&
                                                                !m.Deleted &&
                                                                (showHidden || m.Published)
                                                          orderby pm.DisplayOrder
                                                          select pm;
                                              var productManufacturers = query.ToList();
                                              return productManufacturers;
                                          });
    }

1 个答案:

答案 0 :(得分:1)

在方法中使用StopWatch来确定需要很长时间的部分。

您可能希望将图片网址包含在原始列表中,而不是遍历每个项目并调用_pictureService.GetPictureUrl