前言

上一篇我們穿插了C#的內(nèi)容,本篇我們繼續(xù)來講講webapi中斷點續(xù)傳的其他情況以及利用webclient來實現(xiàn)斷點續(xù)傳,至此關(guān)于webapi斷點續(xù)傳下載以及上傳內(nèi)容都已經(jīng)全部完結(jié),一直嚷嚷著把SQL Server和Oracle數(shù)據(jù)庫再重新過一遍,這篇過完,就要開始新的征程,每一個階段都應(yīng)該有自己的小目標,要不然當工作太忙沒時間去充電,太閑又變得懶散,想想一切是為了未來買得起孩子高檔的奶粉就又有動力了。

話題

關(guān)于webapi斷點續(xù)傳下載的情況,之前我們利用webapi內(nèi)置的api展開了具體的實現(xiàn),這一節(jié)我們利用已經(jīng)老掉牙的技術(shù)來實現(xiàn),這個是看了一篇老外文章而想到的,具體地址忘記了,利用內(nèi)存映射文件來實現(xiàn)斷點續(xù)傳,內(nèi)存映射文件最常見的應(yīng)用場景莫過于對于多個進程之間共享數(shù)據(jù),我們知道進程與進程之間只能操作已經(jīng)分配好各自的內(nèi)存,當我們需要一個進程與另外一個進程共享一塊數(shù)據(jù)時我們該如何做呢,這個時候就要用到內(nèi)存映射文件(MemoryMappedFile),內(nèi)存映射文件是單一機器多進程間數(shù)據(jù)通信的最高效的方式,好了關(guān)于內(nèi)存映射文件具體內(nèi)容可以參考園友【.net 流氓】的文章。我們通過內(nèi)存映射文件管理虛擬內(nèi)存然后將其映射到磁盤上具體的文件中,當然我們得知道所謂的文件能夠被映射并不是將文件復(fù)制到虛擬內(nèi)存中,而是由于會被應(yīng)用程序訪問到,很顯然windows會加載部分物理文件,通過使用內(nèi)存映射文件我們能夠保證操作系統(tǒng)會優(yōu)化磁盤訪問,此外我們能夠得到內(nèi)存緩存的形式。因為文件被映射到虛擬內(nèi)存中,所以在管理大文件時我們需要在64位模式下運行我們的程序,否則將無法滿足我們所需的所有空間。

斷點續(xù)傳(內(nèi)存映射文件)

關(guān)于涉及到的類以及接口在之前文章已經(jīng)敘述,這里我們就不再啰嗦,這里我們給出下載文件的邏輯。