2014-09-24 2 views
0

jpeg를 가져 와서 varbinary (MAX) 데이터 형식 필드의 바이트 배열로 테이블에 삽입하고 있습니다. 그러나 mdf 파일은 삽입하는 모든 파일의 전체 크기에 비해 3-4 배 더 커집니다. 나는 WebResponse를을하고 MemoryStream을로 변환하는 기술을 코딩 표준 C#을 사용하고 있습니다 :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(); 

    } 
} 

그럼에도 불구하고 어떻게 든 사진과 512MB의 크기가 2GB를 통해 MDF 성장 끝을. 테이블에 삽입 할 때 result.length를 사용하여이 필드의 길이를 정의합니다. 자동 성장은 5 %로 설정됩니다.

+1

그렇기 때문에 파일이 jpges 일지라도 파일 시스템에 파일처럼 저장되어야합니다. – py3r3str

답변

0

512MB jpeg는 데이터베이스에서 512MB보다 약간 큰 비트를 가져야합니다. mdf 자체는 커질 수 있지만 데이터베이스 구성 증가 증가의 영향을받습니다. sp_spaceused에는 사용 된 공간과 사용 가능한 공간이 표시되어야합니다.

그러나 파일을 처리하는 방법은 실제로 메모리 스트림을 사용하여 상당히 나쁩니다. 절대로 작동하지 않을 것입니다. HTTP에서 데이터베이스로 파일을 스트리밍하는 올바른 방법은 Download and Upload images from SQL Server via ASP.Net MVC을 읽으십시오. 앱 프로세스 메모리 크기 제약 조건과 데이터베이스 최소 로깅 작업 요구 사항 때문에 UPDATE blob.write을 사용해야합니다. 링크 된 기사는 이유와 방법에 대해 자세히 설명합니다. 동일한 기술을 사용하여 메모리에 전체 사본을 만들지 않고 웹 응답을 스트리밍 할 수도 있습니다.

+0

어쩌면 나는 명확하지 않다. 그것은 1 파일이 아니라 수십만이다. 나는 webrequest를 통해 그들을 다운로드하고 DB에 삽입하고있다. 그러나 mdf가 너무 커지면 나는 왜 그런지 이해하지 못한다고 말했다. – jdf35w

+0

각 파일의 평균 크기는 어느 정도입니까? –

+0

약 25k. 어떻게 든 그들은 "패딩"이되었습니다. – jdf35w