0

SQLServerにファイルをアップロードしています

  1. UIレイヤーからファイルをストリーミングしています。
  2. ビジネスレイヤーに関しては、ここに実装があります。

    HttpWebRequest request = WebRequest.Create(postUrl)as HttpWebRequest;

    ストリームrequestStream=request.GetRequestStream();

    byte [] buffer = new byte [8 * 1024];

    int len;

    while((len = fileToUpload.File.Read(buffer、0、buffer.Length))> 0)

    {{

    requestStream.Write(buffer、0、len);

    requestStream.Flush();

    }

    request.GetResponse()をHttpWebResponseとして返します。

入力ストリームを8KBにチャンクして、応答ストリームに送信しています。

私の質問は、ビジネスレイヤーのfileToUpload.Fileの長さが1 GBの場合、物理的にメモリに保存され、パフォーマンスに影響しますか?

または、ビジネスレイヤー関数を8000回呼び出すように、ファイルをUIからメモリに8KBでチャンクする必要がありますか?

4

2 に答える 2

1

私の場合、複数の呼び出しを行いますが、最近は8Kが非常に小さいので、代わりにメガバイト範囲の複数の呼び出しを実行してみてください。

単一の大きなPOSTの問題は、アップロードの途中で失敗した場合、ファイル全体を再送信する必要があることです。複数の呼び出しを使用すると、次のチャンクに進む前に、チャンクがアップロードされたことを実際に確認できます。

于 2012-09-04T16:07:28.667 に答える
1

エンタープライズドキュメントアプリケーション管理システムでも同様の問題に直面しました。エンコーディングによってペイロードが肥大化し、サーバー側で大量のメモリが消費されるため、Webサービスを介して大きなファイル(> 5 MB)を送信する際に問題が発生しました。

解決策は、ファイルをネットワークドライブ/共有/パスにドロップし、サーバーにポーリングしてネットワークパスからファイルを取得させることでした。もちろん、私の場合、アプリケーションはインターネットではなくイントラネットアプリでした

于 2012-09-04T16:35:08.013 に答える