前言

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

話題

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

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

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

復(fù)制代碼
        /// <summary> /// 下載文件 /// </summary> /// <param name="fileName"></param> /// <returns></returns> 
        		

網(wǎng)友評論