成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

介紹ASP.NET應(yīng)用程序

開(kāi)發(fā) 后端
本文詳細(xì)介紹ASP.NET應(yīng)用程序,上傳文件或處理文件的過(guò)程不經(jīng)ASP.NET處理,以減少ASP.NET應(yīng)用程序線程的消耗。

在Web程序中上傳文件是很常見(jiàn)的需求。利用HTTP協(xié)議上傳文件的方式非常有限,最常見(jiàn)的莫過(guò)于使用元素進(jìn)行上傳。這種上傳方式會(huì)將內(nèi)容使用multipart/form-data方案進(jìn)行編碼,并將內(nèi)容POST到服務(wù)器端。使用 multipart/form-data編碼方式與默認(rèn)的application/x-url-encoded編碼方式相比,在大數(shù)據(jù)量情況下效率要高很多。

使用上傳文件最大的優(yōu)勢(shì)在于編程方便,幾乎各種服務(wù)器端技術(shù)都對(duì)這種上傳方式做了良好的封裝,使得程序員能夠直觀地對(duì)客戶端上傳的文件進(jìn)行處理。不過(guò)總體來(lái)說(shuō),這個(gè)協(xié)議并不適合做文件傳輸,解析數(shù)據(jù)流內(nèi)容的代價(jià)相對(duì)較高,并且沒(méi)有一些例如斷點(diǎn)續(xù)傳的機(jī)制來(lái)輔助,導(dǎo)致在上傳大文件時(shí)經(jīng)常會(huì)力不從心。

有朋友認(rèn)為使用上傳文件最大的問(wèn)題在于內(nèi)存占用太高,由于需要將整個(gè)文件載入內(nèi)存進(jìn)行處理,導(dǎo)致如果用戶上傳文件太大,或者同時(shí)上傳的用戶太多,會(huì)造成服務(wù)器端內(nèi)存耗盡。這個(gè)觀點(diǎn)其實(shí)是錯(cuò)誤的。對(duì)于某些服務(wù)器端的技術(shù),例如Spring Framework,或者早期ASP.NET 1.1時(shí),為了供程序處理,都會(huì)將用戶上傳的內(nèi)容完全載入內(nèi)存,這的確會(huì)帶來(lái)問(wèn)題。但是其實(shí)協(xié)議本身并沒(méi)有規(guī)定服務(wù)器端應(yīng)該使用何種方式來(lái)處理上傳的文件。例如在現(xiàn)在的ASP.NET 2.0中就已經(jīng)會(huì)在用戶上傳數(shù)據(jù)超過(guò)一定數(shù)量之后將其存在硬盤(pán)中的臨時(shí)文件中,而這點(diǎn)對(duì)于開(kāi)發(fā)人員完全透明,也就是說(shuō),開(kāi)發(fā)人員可以像以前一樣進(jìn)行數(shù)據(jù)流的處理。


swfupload也是個(gè)開(kāi)源組件,顧名思義是使用Flash進(jìn)行上傳。不過(guò)對(duì)于swfupload來(lái)說(shuō),F(xiàn)lash的作用主要是“控制”,而不是“展示 ”,這無(wú)疑給了開(kāi)發(fā)人員更大的靈活性。swfupload的實(shí)現(xiàn)方式自然是利用了FileReference和 FileReferenceList組件所提供的功能,通過(guò)Flash與JavaScript的交互能力,使得開(kāi)發(fā)文件上傳功能變得非常優(yōu)雅和容易。有了 swfupload,開(kāi)發(fā)人員可以使用JavaScript來(lái)實(shí)現(xiàn)各種顯示方式,開(kāi)發(fā)像Flicker一樣酷酷的上傳界面也不再是非常困難的事情了。

swfupload是個(gè)客戶端組件,它對(duì)于服務(wù)器端來(lái)說(shuō)完全透明,也就是說(shuō),服務(wù)器端只需要使用對(duì)待普通form的方式來(lái)處理即可。例如在 ASP.NET中我們可以使用Generic Handler來(lái)處理客戶端的文件上傳。如下,fileCollection變量即為客戶端Post至服務(wù)器端所有文件的集合,我們可以使用name或下標(biāo)的方式來(lái)獲得其中的HttpPostedFile對(duì)象。

ASP.NET 2.0啟用硬盤(pán)臨時(shí)文件的閾值(threshold)是可配置的:

  1. <system.web> 
  2. <httpRuntime 
  3. maxRequestLength="Int32" 
  4. requestLengthDiskThreshold="Int32" /> 
  5. system.web> 

maxRequestLength自不必說(shuō),剛接觸ASP.NET的朋友總會(huì)發(fā)現(xiàn)上傳文件不能超過(guò)4M,這就是因?yàn)?maxRequestLength的大小默認(rèn)為4096,這就限制著每個(gè)請(qǐng)求的大小不得超過(guò)4096KB。這么做的目的是為了保護(hù)應(yīng)用程序不受惡意請(qǐng)求的危害。當(dāng)請(qǐng)求超過(guò)maxRequestLength之后,ASP.NET處理程序?qū)⒉粫?huì)處理該請(qǐng)求。這里和ASP.NET拋出一個(gè)異常是不同的,這就是為什么如果用戶上傳文件太大,看到的并非是ASP.NET應(yīng)用程序中指定的錯(cuò)誤頁(yè)面(或者默認(rèn)的),因?yàn)锳SP.NET還沒(méi)有對(duì)這個(gè)請(qǐng)求進(jìn)行處理。 requestLengthDiskThreshold就是剛才所提到的閾值,其默認(rèn)值為256,即一個(gè)請(qǐng)求內(nèi)容超過(guò)256KB時(shí)就會(huì)啟用硬盤(pán)作為緩存。這個(gè)閾值理論上和客戶端是否是在上傳內(nèi)容無(wú)關(guān),只要客戶端發(fā)來(lái)的請(qǐng)求大于這個(gè)值即可。因此,在ASP.NET 2.0中服務(wù)器的內(nèi)存不會(huì)因?yàn)榭蛻舳说漠惓U?qǐng)求而耗盡。 

既然Flash提供了文件上傳功能,Silverlight作為微軟主推的RIA技術(shù)也不會(huì)缺了這項(xiàng)功能。這篇文章源自Silverlight 2.0的Quick Starts,展示了如何使用Silverlight 2.0開(kāi)發(fā)文件上傳的功能,感興趣的朋友可以一讀。

圍繞著ASP.NET中上傳文件這個(gè)話題也討論了不少了,還有什么沒(méi)有涉及到的嗎?個(gè)人認(rèn)為其實(shí)至少還有一個(gè)非常重要問(wèn)題是沒(méi)有討論過(guò),那就是在處理上傳文件時(shí)占用ASP.NET處理線程的問(wèn)題。眾所周知,ASP.NET處理請(qǐng)求時(shí)會(huì)用到線程池中的線程,當(dāng)線程池中的線程被用完之后沒(méi)有被處理的請(qǐng)求只能排隊(duì)了。因此增大ASP.NET應(yīng)用程序吞吐量的一個(gè)重要手段,就是為一些耗時(shí)的操作使用異步處理方式(事實(shí)上這一命題可以在大部分應(yīng)用中成立)。例如一個(gè)數(shù)據(jù)庫(kù)查詢操作需要3秒鐘,如果不使用異步操作,處理線程就會(huì)被阻塞,直至查詢完成。如果使用異步方式來(lái)執(zhí)行數(shù)據(jù)庫(kù)查詢,在這3秒鐘內(nèi)線程就可以用戶處理其他請(qǐng)求,當(dāng)異步操作結(jié)束之后,ASP.NET就會(huì)使用另一個(gè)線程來(lái)繼續(xù)處理這個(gè)請(qǐng)求。

上傳大文件也是一個(gè)長(zhǎng)時(shí)間占用處理線程的工作,而且遺憾的是,這無(wú)法使用異步操作來(lái)完成(通過(guò)異步操作來(lái)釋放處理線程需要操作系統(tǒng)的支持,因此只有少量功能可以使用異步操作)。如果一個(gè)文件上傳需要3分鐘時(shí)間,那么在這3分鐘內(nèi)就會(huì)獨(dú)占一個(gè)處理線程,如果上傳文件的連接一多,就會(huì)大大影響應(yīng)用程序的性能——就像遭受了某種方式的DOS攻擊一樣。因此,即使使用了像NeatUpload和swfupload這樣的組件,也無(wú)法解決上傳連接過(guò)多造成可用線程減少的問(wèn)題。要解決這個(gè)問(wèn)題并不容易,以下是兩種思路(歡迎大家就此問(wèn)題進(jìn)行討論):

◆擴(kuò)展IIS,使上傳文件或處理文件的過(guò)程不經(jīng)ASP.NET處理,以減少ASP.NET應(yīng)用程序線程的消耗。現(xiàn)在有了IIS 7,如果使用集成管道模式,應(yīng)該也可以使用托管代碼進(jìn)行擴(kuò)展。
◆使用額外的ASP.NET應(yīng)用程序處理文件上傳,以節(jié)省上傳文件的線程對(duì)原ASP.NET應(yīng)用程序線程的消耗。

【編輯推薦】

  1. ASP.NET的TypeConverter
  2. 淺析ASP.NET的TypeResolver
  3. ASP.NET中定義JavaScriptConverter
  4. 在ASP.NET中替換Sys.Services的方法
  5. 使用ASP.NET AJAX的Profile Service
責(zé)任編輯:佚名 來(lái)源: IT168
相關(guān)推薦

2009-07-21 15:02:19

ASP.NET應(yīng)用程序

2009-07-22 17:32:40

ASP.NET應(yīng)用程序

2009-07-23 13:26:21

2009-07-29 17:01:13

2009-08-05 10:16:54

部署ASP.NET應(yīng)用

2009-07-20 16:08:04

ASP.NET應(yīng)用程序

2009-07-29 10:30:53

Web應(yīng)用程序ASP.NET

2009-07-23 14:25:03

ASP.NET 2.0

2009-07-29 17:21:10

2009-07-28 10:11:06

ASP.NET應(yīng)用程序

2009-08-04 11:46:09

2009-07-21 15:23:55

預(yù)編譯Web應(yīng)用程序ASP.NET

2009-07-21 15:14:32

預(yù)編譯應(yīng)用程序ASP.NET

2009-07-24 10:41:00

ASP.NET Web

2009-07-22 18:02:27

論壇應(yīng)用程序ASP.NET MVC

2009-07-22 18:07:55

論壇應(yīng)用程序ASP.NET MVC

2009-07-27 17:46:42

WCF服務(wù)ASP.NET應(yīng)用程序

2009-07-24 11:25:53

Web應(yīng)用程序工程ASP.NET MVC

2009-07-23 13:14:20

ASP.NET應(yīng)用程序

2009-08-14 17:57:43

ASP.NET MVC
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 在线观看av网站永久 | 精品自拍视频在线观看 | 国产成人在线视频免费观看 | 国产成人免费视频网站视频社区 | 午夜精品久久久久久久久久久久久 | 91爱啪啪 | 国产成人高清视频 | 国内自拍视频在线观看 | 瑞克和莫蒂第五季在线观看 | 国产精品久久久久久久久久久久久久 | 日本欧美国产 | 亚洲乱码国产乱码精品精98午夜 | 国产精品一区三区 | 成人小视频在线观看 | 手机av在线 | 国产一级电影在线观看 | 狠狠色综合欧美激情 | 国产一区三区在线 | 91精品国产91久久久久久吃药 | 欧美情趣视频 | 韩日一区二区三区 | 国产福利在线 | 在线视频亚洲 | 黄色大片视频 | 亚洲永久入口 | 久亚州在线播放 | 国产精品毛片一区二区三区 | 国产91一区二区三区 | 日韩欧美中文在线 | 国产精品美女一区二区三区 | av喷水| 99视频在线| 激情六月丁香婷婷 | 国产精品久久国产愉拍 | 久久久久久综合 | 亚洲一区二区成人 | 99精品电影 | 精品乱子伦一区二区三区 | 高清国产一区二区 | 日韩视频在线播放 | 成人免费视频在线观看 |