0

次のコードを、平均 3MB のサイズの 30 から 50 個の JPEG (<20 同時ユーザーの場合) を返すことができる効率的な Web API コントローラー メソッドに変更したいと思います。

    public async Task<HttpResponseMessage> Get(int imageid) {
        return await Task.Run(() => {
            var dzImage = _dataContext.DeepZoomImages.SingleOrDefault(_ => _.ImageID == imageid);
            if (dzImage == default(DeepZoomImage)) {
                throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound));
            }
            var response = new HttpResponseMessage(HttpStatusCode.OK);
            var bitmap = GetFullSizeBitmap(dzImage);
            var memoryStream = new MemoryStream();
            bitmap.Save(memoryStream, ImageFormat.Jpeg);
            response.Content = new ByteArrayContent(memoryStream.ToArray());
            var fileName = string.Format("{0}.jpg", dzImage.ImageName);
            response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = fileName };
            response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");
            memoryStream.Flush();
            return response;
        });
    }

前述の方法では、1 つのイメージを処理します。この使用法/負荷シナリオで複数の画像を効率的に処理するには、どうすれば複数形にすることができますか? Task<HttpResponseMessage>[] または Task<HttpResponseMessage[]> を返すことは可能ですか?

それとも、すべての画像を生成して一度に返すほうがよいでしょうか?

ご協力いただきありがとうございます...

4

1 に答える 1

0

私たちの議論に基づくと、ここでの最善のアプローチは、サーバー上に ZIP ファイルを作成し、その 1 つのファイルをユーザーにダウンロードすることです。別の方法として、このマルチファイル ダウンロードアプローチを試すことができます。

于 2013-01-28T23:42:26.227 に答える