2

特定のクライアントの画像などのソースを制御するために、download.aspx を実装しようとしています。download.aspx.cs ではバッファリング方式を使用しています。コードを以下に示します。

using (var fs = new FileStream(_path, FileMode.Open, FileAccess.Read))
{
    Response.BufferOutput = false;   // to prevent buffering 
    byte[] buffer = new byte[1024];
    int bytesRead = 0;
    if (_file.Extension == ".pdf")
    {
        Response.AddHeader("Content-Disposition", "inline; filename=" + _file.Name);
    }
    else
    {
        Response.AddHeader("Content-Disposition", "attachment; filename=" + _file.Name);
    }
    Response.AddHeader("Content-Length", _file.Length.ToString());
    Response.ContentType = ReturnExtension(_file.Extension.ToLower());

    while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0)
    {
        Response.OutputStream.Write(buffer, 0, bytesRead);
    }
}

単一のファイルをダウンロードするときにうまく機能します。ただし、私たちの状況では、同時に約 20 枚の画像を読み込もうとしています。非常に遅くなります。以下は、キャプチャされた画面です:-

ここに画像の説明を入力

原因がわかりません。これがファイルを制御するための実用的な方法であるか、それを達成するための他のより良い方法があるかを知りたいです。

4

3 に答える 3

0

上記の回答に同意します。ただし、これが「行かなければならない」ルートである場合。以下をご覧ください。

あなたはasp.netページを使用していますが、ハンドラールートに行くのではなく、asp.netライフサイクルの多くを切り取っています。これにより、画像の読み込み時間が短縮されます。

次に、Asynchronous HTTP Handler を見てください。

パフォーマンスの向上に役立つ応答出力のキャッシュも検討できます。 これを読む

この情報が少しでもお役に立てば幸いです。

于 2012-09-10T08:38:24.847 に答える
0

私は使用していませんが、HttpModuleクラスを使用すると、IIS にファイルを静的に提供させながら、それらのファイルへのアクセスをプログラムで制御できるようになる場合があります。

public class AccessControlModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.BeginRequest +=
            (s, e) =>
            {
                if (!AccessPermitted(context))
                    context.Response.Redirect(AccessDeniedUrl);

                // Otherwise, IIS will serve the file as normal
            };
    }

    //...
}

<httpModules>
   <add name="AccessControlModule" type="MyNamespace.AccessControlModule" />
</httpModules>

いくつかのサンプルについては、こちらを参照してください。

于 2012-09-11T06:17:50.100 に答える
0

Asp.net のワーカー スレッドの数は限られています。このようなことをすると、それらのスレッドの負荷が何倍にも増えます。

IIS に静的コンテンツを処理させるのが最善です。

1 つのファイル リクエストであったはずのものが、スクリーンショットから少なくとも 17 のリクエストになりました。この負荷により、サーバーの速度が大幅に低下します。

于 2012-09-10T08:34:29.630 に答える