0

jpeg を取得し、それらを varbinary(MAX) データ型フィールドのバイト配列としてテーブルに挿入しています。ただし、mdf ファイルのサイズは、挿入するすべてのファイルの合計サイズの 3 倍から 4 倍大きくなっています。標準の C# コーディング手法を使用して、Web 応答を取得し、それをメモリストリームに変換しています。

byte[] result;
byte[] buffer = new byte[4096];

using (Stream responseStream = request.GetResponse().GetResponseStream())
{
    using (MemoryStream memoryStream = new MemoryStream())
    {
        int count = 0;
        do
        {
            count = responseStream.Read(buffer, 0, buffer.Length);
            memoryStream.Write(buffer, 0, count);

        } while (count != 0);

        result = memoryStream.ToArray();

    }
}

それでも、どういうわけか、512 MB の jpeg は、サイズが 2 GB を超える MDF を成長させてしまいます。テーブルに挿入する場所では、result.length を使用してこのフィールドの長さを定義しています。自動成長は 5% に設定されています。

4

1 に答える 1

0

512 MB の jpeg は、データベースで 512 MB を少し超える必要があります。mdf 自体が大きくなる可能性がありますが、それはデータベースで構成された成長の増分の影響を受けます。sp_spaceused使用済みスペースと空きスペースを表示する必要があります。

しかし、メモリ ストリームを使用してファイルを処理する方法は、実際にはかなり悪いものです。うまくいくことはありません。HTTP からデータベースにファイルをストリーミングする正しい方法については、ASP.Net MVC を介して SQL Server からイメージをダウンロードおよびアップロードするを参照してください。UPDATE blob.writeアプリ プロセスのメモリ サイズの制約と、データベースの最小ログ操作要件のため、使用する必要があります。リンクされた記事では、その理由と方法について詳しく説明しています。メモリ内に完全なコピーを作成せずに、同じ手法を使用して Web 応答をストリーミングすることもできます。

于 2014-09-24T20:27:32.563 に答える