c 大檔案分割過程

2022-02-07 04:12:21 字數 2420 閱讀 7157

需求:

在專案開發中,我們會遇到單個檔案大小超過1tb的檔案,這樣的檔案只能進行單檔案讀取,往往會造成讀取完成耗時過長,導致客戶在使用體驗過程中不滿意。

為了解決提公升大檔案的解析速度,我想到了先分割大檔案為小檔案,之後進行並行多個檔案同時解析入庫方案。

那麼,怎麼才可以把乙個大檔案分割為多個小檔案呢?

如果我按照大小來控制分割出來的小檔案,會造成檔案的丟失問題,如果按照行數來分割,一行一行進行讀取務必會造成分割檔案耗時過長。

討論:如果乙個1tb的檔案,我們按照大小來控制檔案個數,假設每個分割出來的檔案大小為200m,這樣的話1tb分割出來約5200個檔案,這樣子的話最多造成約10000行資訊被破壞,可以忽略不計。

所以我們為了減少分割檔案帶來的耗時時間長度,採取分割方案採用定長控制分割出來的檔案大小。

1

using (filestream readerstream = new

filestream(file, filemode.open, fileaccess.read))2】:

", filepath, datetime.now.tostring("

yyyy-mm-dd hh:mm:ss.fff

"));

15using (filestream writerstream = new

filestream(filepath, filemode.openorcreate, fileaccess.write))

16】:

", filepath, datetime.now.tostring("

yyyy-mm-dd hh:mm:ss.fff

"));

2829 readercursor = 0

;30 filecursor++;

3132

goto

nextfilebegin;33}

34}35}

36}37}

38 }

1

using

system;

2using

system.collections.generic;

3using

system.linq;

4using

system.text;

5using

system.io;

6using

system.configuration;78

namespace

bigfilesplittest935

else

3641

42int steps = (int)(fileinfo.length /splitfilesize);

43using (filestream fs = new

filestream(file, filemode.open, fileaccess.read))

44】:

", filepath, datetime.now.tostring("

yyyy-mm-dd hh:mm:ss.fff

"));

5354

byte input =br.readbytes(splitfilesize);

55using (filestream writefs = new

filestream(filepath, filemode.create))

5661}62

63 isreadingcomplete = (input.length !=splitfilesize);

64if (!isreadingcomplete)

6568 console.writeline("

完成讀取檔案【】:

", filepath, datetime.now.tostring("

yyyy-mm-dd hh:mm:ss.fff

"));69}

70}71}

7273

74 console.writeline("

分隔完成,請按下任意鍵結束操作。。。");

75console.readkey();

7677}78

}79 }

從實驗結果發現:方案一的效能較方案二的效能約耗時10倍。

具體原因為什麼?

請你思考下:

一次性讀取1m,直到讀取到200m為止,開始寫入下乙個分割檔案。

一次性讀取200m,立即寫入分割檔案,開始下乙個分割檔案操作。

linux 分割大檔案

你曾經是否想要把乙個大檔案分割成多個小檔案?比如乙個5gb日誌檔案,我們需要把它分成多個小檔案,這樣我們才有可能使用普通的文字編輯器讀取它。有時我們需要傳輸20gb的大檔案到另一台伺服器,這就需要我們把它分割成多個檔案,這樣便於傳輸資料。下面我們來通過五個例項來講解它。split命令分割檔案成每個檔...

linux 大檔案分割 split

1,split b 100m d a 3 test.log small test log 結果 small test log 001 small test log 002 small test log 003 每個檔案的大小為100mb 2,split b 100m test.log small t...

大檔案分割上傳

有的時候我們想要操作的檔案很大,比如 我們想要上傳乙個大檔案,但是收到上傳檔案大小的限制,無法上傳,這是我們可以將乙個大的檔案分割成若干個小檔案進行操作,然後再把小檔案還原成原始檔。對應的js function submitform begin,part done function result f...