3

Windows Server 2003 ボックスの IIS 6 でホストされている Web アプリケーションがあり、7 ~ 8 MB 前後の 2 つの大きな PDF ファイルを処理する必要があります。これらのファイルは Web サイトによってネットワーク共有から読み取られ、バイトは別の場所に保存するために WCF サービスに渡されます。 .

ファイルを読み取るために使用するコードは次のとおりです。

public static byte[] ReadFile(string filePath)
{
    int count;
    int sum = 0;
    byte[] buffer;
    FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read);

    try
    {
        int length = (int)stream.Length;
        buffer = new byte[length];

        while ((count = stream.Read(buffer, sum, length - sum)) > 0)
            sum += count;

        return buffer;
    }
    catch (Exception)
    {
        throw;
    }
    finally
    {
        stream.Close();
        stream.Dispose();
    }
}

でエラーがスローされstream.Read()ます。エラーは次のとおりです。

要求されたサービスを完了するためのシステム リソースが不足しています

このコードは私の開発環境では機能しますが、実稼働環境に投稿するとすぐにこのエラー メッセージが表示されます。このエラーは、検索ラウンドで数回発生し、これに対する回避策を使用するFile.Move()ことを確認しましたが、ファイルを WCF サービス メソッドに渡す必要があるため、これを行うことはできません。

ファイルの読み取り時にメモリに 15 ~ 20 MB を保持できるようにするために、IIS6 に変更が必要なものはありますか? または、他に設定する必要があるものはありますか?

何か案は?

4

1 に答える 1

1

これを参照してください:

バッファリングするためにファイルを1つずつ読み取る必要があるのはなぜですか?

バッファリングせずにファイル全体を読んでいるようです。

バッファ=新しいバイト[長さ];

よろしくお願いします。

于 2012-05-09T10:02:00.853 に答える