使用HttpResponseMessage获取图像的最佳/最快方法是什么?

时间:2014-11-19 21:46:10

标签: c# performance optimization asp.net-web-api

我目前有这种方法:

  public HttpResponseMessage Get(string FileId, string VersionId)
        {
            byte[] fileContents;

            var file = DataRepository.GetSingle<FileModel>(ObjectId.Parse(FileId));
            var fileDir = file.Dir + "/"+VersionId+ file.FileExtension;
            var result = new HttpResponseMessage(HttpStatusCode.OK);
            using (MemoryStream memoryStream = new MemoryStream())
            {
                using (var image = new Bitmap(WebRequest
                    .Create(fileDir)
                    .GetResponse()
                    .GetResponseStream()))
                {
                    image.Save(memoryStream, StorageServiceHelper.GetImageFormatFromFileName(fileDir));
                    fileContents = memoryStream.ToArray();

                    var stream = new MemoryStream(fileContents);
                    result.Content = new StreamContent(stream);
                    result.Content.Headers.ContentType = new MediaTypeHeaderValue(file.MediaType);
                }
            }

            return result; 

因此,对于每个图像请求,它都会调用此方法,但在第一个请求时似乎非常缓慢(每个请求5 kb文件至少1秒)。有更快的方法吗?             }

1 个答案:

答案 0 :(得分:0)

这看起来像一个非常复杂的方法,但我不知道为什么你这样做的细节。在任何情况下,这是我的控制器返回图像:

public async Task<HttpResponseMessage> Get(HttpRequestMessage request, int id)
    {

        byte[] img = await _repo.GetImgAsync(id);//gets image from database.

        HttpResponseMessage msg = new HttpResponseMessage(HttpStatusCode.OK)
        {
            Content = new ByteArrayContent(img)
        };
        msg.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png");

        return msg;
    }

另外,如果它只是第一个请求很慢,那么可能是Asp.Net启动应用程序。如果在IIS中重新启动应用程序池,则可以在实时服务器上看到相同的内容。