2014-09-24 72 views
0

我正在將jpegs作爲varbinary(MAX)數據類型字段中的字節數組插入到表中。但是,mdf文件的大小要比我插入的所有文件的總大小大三至四倍。我使用的是標準的C#編碼技術採取WebResponse類並將其轉換成一個MemoryStream:插入二進制數據的Mdf文件變得太大

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(); 

    } 
} 

然而不知何故JPEG文件的512MB的最終大小超過2GB增長的中密度纖維板。在我插入表格的地方,我使用result.length定義了這個字段的長度。自動增長設置爲5%。

+1

這就是爲什麼文件應該存儲在文件系統中的文件,即使是jpges。 – py3r3str 2014-09-24 20:07:30

回答

0

一個512 MB的jpeg應該在數據庫中超過512 MB。 MDF本身可能會變得更大,但這取決於數據庫配置的增長增量。 sp_spaceused應顯示使用的空閒空間。

但是,使用內存流來處理文件的方式其實很糟糕。永遠不會工作。閱讀Download and Upload images from SQL Server via ASP.Net MVC,瞭解將文件從HTTP傳輸到數據庫的正確方法。您必須使用UPDATE blob.write,因爲應用程序進程內存大小限制以及數據庫最低限度記錄的操作要求。鏈接的文章更詳細地解釋了爲什麼以及如何去做。您也可以使用相同的技術在Web響應中進行流式傳輸,而無需在內存中創建完整副本。

+0

也許我不清楚,它不是1個文件,但數十萬。我正在通過webrequest下載它們,然後將它們插入到數據庫中,但正如我所說的,mdf增長過大,我不明白爲什麼。 – jdf35w 2014-09-24 20:31:27

+0

平均每個文件有多大? – 2014-09-24 20:32:23

+0

約25k。不知何故,他們得到「填充」 – jdf35w 2014-09-24 20:55:55