自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何提高ASP.NET性能

開(kāi)發(fā) 后端
如果您在ASP.NET中編寫(xiě)的代碼,那么你需要通過(guò)以下幾點(diǎn),以確保良好的性能.

如果您在ASP.NET中編寫(xiě)的代碼,那么你需要通過(guò)以下幾點(diǎn),以確保良好的性能:

◆ 你是否使用緩存嗎?

◆ 你是否使用會(huì)話(huà)狀態(tài)?

◆ 你使用的應(yīng)用程序狀態(tài)嗎?

◆ 你使用線(xiàn)程和同步功能?

◆ 你資源的有效管理呢?

◆ 你有效地管理字符串?

◆ 你有效地管理例外?

◆ 有你優(yōu)化你的網(wǎng)頁(yè)?

◆ 你使用視圖狀態(tài)?

◆ 你使用服務(wù)器控件嗎?

◆ 你從你的頁(yè)面訪(fǎng)問(wèn)數(shù)據(jù)嗎?

◆ 你可以使用數(shù)據(jù)綁定嗎?

◆ 你從ASPX頁(yè)面調(diào)用非托管代碼?

◆ 你有沒(méi)有審查Machine.config中的設(shè)置嗎?

您使用緩存嗎?

使用下面的復(fù)習(xí)題,以評(píng)估您的代碼使用ASP.NET緩存功能:

◆ 你有太多的變化輸出緩存嗎?

檢查您的網(wǎng)頁(yè),使用輸出緩存,以確保數(shù)量變化有限制。輸出緩存頁(yè)面太多的變化可以導(dǎo)致內(nèi)存使用量的增加。您可以識(shí)別的網(wǎng)頁(yè),使用搜索字符串“OutputCache”輸出緩存。

◆ 你能使用輸出緩存?

在審查您的網(wǎng)頁(yè)時(shí),開(kāi)始問(wèn)自己:如果可以緩存整個(gè)頁(yè)面 。如果整個(gè)頁(yè)面不能被緩存,可以把它的部分被緩存?即使數(shù)據(jù)不是一成不變的,可以考慮使用輸出緩存 。如果您的內(nèi)容并不需要在近實(shí)時(shí)傳送,考慮輸出緩存。

使用輸出緩存緩存,無(wú)論是整個(gè)頁(yè)面或部分頁(yè)面可以顯著提高性能 。

◆ 有,將更好地存儲(chǔ)在緩存中的靜態(tài)數(shù)據(jù)?

識(shí)別應(yīng)用程序端的數(shù)據(jù)是靜態(tài)的還是很少更新。這種類(lèi)型的數(shù)據(jù)存儲(chǔ)在緩存中的一個(gè)偉大的候選人。

◆ 你訪(fǎng)問(wèn)緩存中的項(xiàng)目為空值之前檢查嗎?

前檢查null訪(fǎng)問(wèn)緩存的項(xiàng)目,如下面的代碼片段所示,您可以提高性能。

  1. Object item = Cache["myitem"];  
  2. if (item==null)  
  3. {  
  4.     // repopulate the cache  

這有助于避免任何導(dǎo)致的異??諏?duì)象。為了找到你的代碼在您訪(fǎng)問(wèn)緩存。

您使用會(huì)話(huà)狀態(tài)?

使用下面的復(fù)習(xí)題,審查代碼的使用會(huì)話(huà)狀態(tài):

◆ 你不需要時(shí)禁用會(huì)話(huà)狀態(tài)?

默認(rèn)情況下,會(huì)話(huà)狀態(tài)仍然。如果您的應(yīng)用程序不使用會(huì)話(huà)狀態(tài),禁用它在Web.config文件如下:

如果您的應(yīng)用程序的某些部分需要會(huì)話(huà)狀態(tài),確定不使用它,這些頁(yè)面禁用它通過(guò)使用下面的頁(yè)面級(jí)別屬性的頁(yè)面。

◆ 最大限度地減少使用的會(huì)話(huà)狀態(tài),增加了應(yīng)用程序的性能。

◆ 你有頁(yè)面不寫(xiě)一個(gè)會(huì)話(huà)嗎?

使用會(huì)話(huà)狀態(tài)的頁(yè)面請(qǐng)求在內(nèi)部使用ReaderWriterLock,管理會(huì)話(huà)狀態(tài)的訪(fǎng)問(wèn)。對(duì)于只讀會(huì)話(huà)數(shù)據(jù)的網(wǎng)頁(yè),,考慮的EnableSessionState設(shè)置為ReadOnly。

  1. <%@ Page EnableSessionState="ReadOnly" . . .%> 

這是特別有用,當(dāng)您使用HTML框架。默認(rèn)設(shè)置(由于ReaderWriterLock)頁(yè)面執(zhí)行序列化。將它設(shè)置為只讀,可以防止阻塞和允許更多的并行。

◆ 你檢查之前在會(huì)話(huà)狀態(tài)的訪(fǎng)問(wèn)中的項(xiàng)目為空值?

為空,然后再訪(fǎng)問(wèn)該項(xiàng)目的檢查,在下面的代碼所示,您可以提高性能。

  1. object item = Session["myitem"];  
  2. if(item==null)  
  3. {  
  4.     // do something else  

常見(jiàn)的錯(cuò)誤,從會(huì)話(huà)狀態(tài)中檢索數(shù)據(jù)時(shí)是不檢查,如果數(shù)據(jù)是空的,前訪(fǎng)問(wèn),然后捕獲由此導(dǎo)致的異常。你應(yīng)該避免這種情況,因?yàn)楫惓J前嘿F的。要找到你的代碼訪(fǎng)問(wèn)會(huì)話(huà)狀態(tài),你可以搜索字符串“會(huì)議”。

◆ 你復(fù)雜的對(duì)象存儲(chǔ)在會(huì)話(huà)狀態(tài)嗎?

避免復(fù)雜的對(duì)象存儲(chǔ)在會(huì)話(huà)狀態(tài),特別是如果你使用一個(gè)徹頭徹尾的進(jìn)程外會(huì)話(huà)狀態(tài)存儲(chǔ)。當(dāng)使用進(jìn)程外會(huì)話(huà)狀態(tài),對(duì)象被序列化和反序列化的每個(gè)請(qǐng)求,從而降低性能。

◆ 你STA COM對(duì)象存儲(chǔ)在會(huì)話(huà)狀態(tài)嗎?

存儲(chǔ)在會(huì)話(huà)狀態(tài)中的單線(xiàn)程單元(STA)COM對(duì)象會(huì)導(dǎo)致線(xiàn)程關(guān)聯(lián),因?yàn)闀?huì)話(huà)綁定到原來(lái)的線(xiàn)程上創(chuàng)建該組件。這嚴(yán)重影響性能和可擴(kuò)展性。確保您使用以下頁(yè)面級(jí)​​別屬性在任何網(wǎng)頁(yè)上,STA COM對(duì)象存儲(chǔ)在會(huì)話(huà)狀態(tài)。

這力量運(yùn)行頁(yè)面的STA線(xiàn)程池,避免任何昂貴的公寓開(kāi)關(guān)從默認(rèn)的多線(xiàn)程單元(MTA)為ASP.NET線(xiàn)程池。在可能的情況下,避免使用STA COM對(duì)象。

你使用應(yīng)用程序狀態(tài)嗎?

使用下面的復(fù)習(xí)題,如何有效地評(píng)估你的代碼使用應(yīng)用程序狀態(tài):

◆ 你STA COM組件存儲(chǔ)在應(yīng)用程序的狀態(tài)?

避免STA COM組件存儲(chǔ)在應(yīng)用程序的狀態(tài)在可能的情況下。這樣做有效地瓶頸您的應(yīng)用程序到一個(gè)單獨(dú)的執(zhí)行線(xiàn)程訪(fǎng)問(wèn)組件時(shí)。在可能的情況下,應(yīng)避免使用STA COM對(duì)象。

◆ 你使用的應(yīng)用程序狀態(tài)字典嗎?

用于存儲(chǔ)只讀的值可以設(shè)置在應(yīng)用程序初始化時(shí),不改變之后,你應(yīng)該使用的應(yīng)用程序的狀態(tài)字典。要知道在代碼中使用時(shí),應(yīng)用程序的狀態(tài),如以下幾個(gè)問(wèn)題:

分配到應(yīng)用程序變量的存儲(chǔ)的內(nèi)存沒(méi)有被釋放,除非它們被取出或更換。

應(yīng)用程序狀態(tài)不是Web場(chǎng)或Web園 - 共享存儲(chǔ)在應(yīng)用程序狀態(tài)中的變量是全球性的的特定應(yīng)用程序運(yùn)行過(guò)程中,。每個(gè)應(yīng)用程序進(jìn)程可以有不同的價(jià)值觀。

◆ 考慮使用以下替代應(yīng)用程序的狀態(tài):

 為應(yīng)用程序而不是使用狀態(tài)字典創(chuàng)建的靜態(tài)屬性。它是更有效的訪(fǎng)問(wèn)狀態(tài)字典查找比一個(gè)靜態(tài)屬性。例如,考慮下面的代碼:

這是更有效地使用下面的代碼:

使用配置文件,用于存儲(chǔ)應(yīng)用程序的配置信息。

考慮緩存數(shù)據(jù)是足夠的揮發(fā)性,它不能存儲(chǔ)在應(yīng)用程序的狀態(tài),但需要定期更新緩存中的對(duì)象,從一個(gè)持久化介質(zhì)。

使用會(huì)話(huà)存儲(chǔ)用戶(hù)特定的信息。你可以找出你的代碼的地方使用搜索字符串“應(yīng)用”應(yīng)用程序的狀態(tài)。

你使用應(yīng)用程序狀態(tài)嗎?

NET Framework公開(kāi)各種線(xiàn)程和同步功能,您的代碼中使用多線(xiàn)程的方式可以有一個(gè)應(yīng)用程序的性能和可擴(kuò)展性的顯著影響。使用下面的復(fù)習(xí)題,到如何有效地評(píng)估你的ASP.NET代碼使用線(xiàn)程:

◆ 你創(chuàng)建線(xiàn)程每個(gè)請(qǐng)求的基礎(chǔ)上?

避免手動(dòng)創(chuàng)建ASP.NET應(yīng)用程序中的線(xiàn)程。創(chuàng)建線(xiàn)程是一項(xiàng)昂貴的的操作,需要初始化托管和非托管的資源。如果你需要額外的線(xiàn)程來(lái)執(zhí)行工作,使用CLR線(xiàn)程池。為了找到你的代碼的地方,你正在創(chuàng)建線(xiàn)程,搜索字符串“的ThreadStart”。

◆ 你執(zhí)行長(zhǎng)時(shí)間運(yùn)行的阻塞操作嗎?

避免堵在你的ASP.NET應(yīng)用程序在可能的情況下操作。如果你必須執(zhí)行一個(gè)長(zhǎng)時(shí)間運(yùn)行的任務(wù),然后再考慮使用異步執(zhí)行(如果你可以自由調(diào)用線(xiàn)程)或使用異步“火,忘記”模型。

資源的有效管理呢?

使用以下的檢討,以評(píng)估您的代碼如何有效地使用資源的問(wèn)題:

你明確地關(guān)閉資源?

確保您的代碼明確關(guān)閉對(duì)象實(shí)現(xiàn)IDisposable接口通過(guò)調(diào)用對(duì)象的Dispose或Close方法。未能關(guān)閉資源和迅速,可導(dǎo)致內(nèi)存消耗增加,表現(xiàn)不佳。

沒(méi)有關(guān)閉數(shù)據(jù)庫(kù)連接,是一個(gè)普遍問(wèn)題。使用finally塊(或在C#中使用的塊)來(lái)釋放這些資源,以確保資源被關(guān)閉,即使發(fā)生異常。

池共享資源呢?

檢查您使用池訪(fǎng)問(wèn)共享資源時(shí),以提高性能。確保共享資源,如數(shù)據(jù)庫(kù)連接和服務(wù)組件,可以匯集,正在匯集。沒(méi)有集中,你的代碼即被初始化的開(kāi)銷(xiāo)每個(gè)共享資源的使用時(shí)間。

你晚獲取資源和早期釋放他們?

打開(kāi)共享資源之前,你需要他們,只要你完成他們釋放。持有時(shí)間比你需要的人士,到資源,增加內(nèi)存的壓力,并增加對(duì)這些資源的競(jìng)爭(zhēng),如果他們共享。

你塊數(shù)據(jù)傳輸I / O調(diào)用嗎?

如果你需要在塊I / O調(diào)用的數(shù)據(jù)傳輸,分配和針塊用于發(fā)送和接收緩沖區(qū)。如果您需要進(jìn)行并發(fā)的I / O調(diào)用,你應(yīng)該創(chuàng)建一個(gè)固定的回收這是在不同的客戶(hù),而不是每個(gè)請(qǐng)求的基礎(chǔ)上創(chuàng)建一個(gè)緩沖區(qū)的緩沖區(qū)池。這可以幫助您避免堆碎片和減少緩沖區(qū)的創(chuàng)建時(shí)間。

您有效地管理弦樂(lè)?

使用下面的復(fù)習(xí)題,以評(píng)估如何有效地你的ASP.NET代碼操縱字符串:

你使用的格式化輸出的Response.Write嗎?

確定你的代碼在您連接輸出,如創(chuàng)建一個(gè)表,并考慮使用Response.Write來(lái)代替?;貜?fù)于書(shū)面內(nèi)容給客戶(hù)端的最有效的方法。

你使用StringBuilder來(lái)連接字符串嗎?

如果追加數(shù)量是未知的,你不能發(fā)送數(shù)據(jù)到客戶(hù)端使用的Response.Write立即的,使用StringBuilder類(lèi)來(lái)連接字符串。

你=連接字符串+嗎?

確定在你的代碼的地方,你使用+ =運(yùn)算符執(zhí)行字符串串聯(lián)。如果追加的數(shù)量是未知的,或你追加一個(gè)未知大小的數(shù)據(jù),考慮使用StringBuilder類(lèi)來(lái)代替。

您有效地管理例外?

使用以下審查問(wèn)題,如何有效地評(píng)估您的代碼中使用異常:

有你在Global.asax中實(shí)現(xiàn)了一個(gè)錯(cuò)誤處理程序?

雖然落實(shí)在Global.asax中的錯(cuò)誤處理程序不一定提高性能,它可以幫助您確定您的應(yīng)用程序,在發(fā)生意外異常。您找出發(fā)生的異常后,采取適當(dāng)?shù)男袆?dòng),以避免這些例外。

你使用的try /可支配資源終于?

確保在finally塊中釋放,以確保他們得到清除,即使在異常事件,可支配資源。不處置的資源,是一個(gè)普遍問(wèn)題。

請(qǐng)問(wèn)你的代碼,避免異常?

你的代碼應(yīng)該試圖避免例外,以提高性能,因?yàn)楫惓?huì)導(dǎo)致顯著的開(kāi)銷(xiāo)。使用以下方法:

檢查空值。

不要使用異常來(lái)控制常規(guī)應(yīng)用程序邏輯。

不要捕獲異常,你不能處理和模糊有用的診斷信息。

使用重載Server.Transfer方法Server.Transfer的(字符串,BOOL),而不是Server.Transfer的,Response.Redirect,Response.End,以避免異常。

您優(yōu)化您的網(wǎng)頁(yè)?

使用下面的復(fù)習(xí)題,評(píng)估aspx頁(yè)的效率。

你采取的步驟,以減少頁(yè)面大小?

盡量保持頁(yè)面大小到最低限度。較大的頁(yè)大小,因?yàn)樵黾拥奶幚砟芰途W(wǎng)絡(luò)帶寬利用率,從而可能導(dǎo)致網(wǎng)絡(luò)擁塞的顯著增加CPU的負(fù)載增加。這兩個(gè)因素導(dǎo)致響應(yīng)時(shí)間增加為客戶(hù)??紤]以下的指引,以協(xié)助減少頁(yè)面大?。?/p>

包括使用腳本(腳本,而不是點(diǎn)綴的HTML代碼標(biāo)簽)。

從你的HTML中刪除多余的空白字符。

禁用它不需要服務(wù)器控件的視圖狀態(tài)。

避免長(zhǎng)時(shí)間的控制名稱(chēng)。

最小化使用的圖形,并使用壓縮圖像。

考慮使用級(jí)聯(lián)樣式表,以避免反復(fù)相同的格式指令發(fā)送到客戶(hù)端。

緩沖禁用?

確保你有緩沖啟用。緩沖會(huì)導(dǎo)致服務(wù)器緩沖輸出和發(fā)送后,才完成了處理頁(yè)面。如果緩沖被禁止,勞動(dòng)者的過(guò)程,需要不斷流從所有的并發(fā)請(qǐng)求的響應(yīng),這可能是內(nèi)存和處理器上的顯著的開(kāi)銷(xiāo),尤其是當(dāng)你使用ASP.NET進(jìn)程模型。要找出緩沖禁用,如果你有,你可以搜索以下字符串為您的代碼庫(kù):“緩沖區(qū)”和“BufferOutput。”確保緩沖區(qū)<pages>元素屬性設(shè)置為true,在您的應(yīng)用程序的Web.config 文件。

  1. <pages buffer="True"> 

#p#

你使用Response.Redirect嗎?

搜索你的代碼為“Response.Redirect”,并考慮更換與Server.Transfer的。這并不招致了一個(gè)新的請(qǐng)求成本,因?yàn)樗苊饬巳魏慰蛻?hù)端重定向。

你不能總是簡(jiǎn)單地取代Response.Redirect調(diào)用Server.Transfer的調(diào)用,因?yàn)镾erver.Transfer使用一個(gè)新的處理程序在執(zhí)行的處理程序階段。Response.Redirect產(chǎn)生第二個(gè)請(qǐng)求。如果你需要不同的身份驗(yàn)證和授權(quán),緩存,或其他運(yùn)行時(shí)設(shè)備上的目標(biāo),這兩個(gè)機(jī)制是不等價(jià)的。Response.Redirect導(dǎo)致一個(gè)額外的請(qǐng)求被發(fā)送到服務(wù)器。Response.Redirect也使得用戶(hù)可見(jiàn)的網(wǎng)址。這可能需要在某些情況下,您要求用戶(hù)書(shū)簽的新位置。

你使用Page.IsPostBack?

檢查在你的頁(yè)面的邏輯使用Page.IsPostBack屬性,以減少多余的處理,避免不必要的初始化成本。使用Page.IsPostBack屬性有條件地執(zhí)行代碼,根據(jù)頁(yè)面是否是響應(yīng)服務(wù)器控件事件生成,或者它是否是首次加載。

你驗(yàn)證用戶(hù)輸入?

檢查,驗(yàn)證用戶(hù)輸入客戶(hù)端上,以減少服務(wù)器的往返行程。這也提供了更好的反饋給用戶(hù)。出于安全原因,確保任何客戶(hù)端驗(yàn)證與對(duì)應(yīng)的服務(wù)器端驗(yàn)證贊揚(yáng)。

你有沒(méi)有制定明確和嚴(yán)格的真實(shí)?

確保您使用Option Strict和明確,以減少意外的后期綁定,當(dāng)使用Visual Basic。NET中。

  1. <%@ Page Language="VB" Explicit="true" Strict="true" %> 

這可以很容易地搜索,使用正則表達(dá)式的Findstr.exe進(jìn)行文件。

  1. C:\findstr /i /s /r /c:"<%.*@.*page.*%>" *.aspx  
  2. pag\default.aspx:<%@ Page Language="VB" %> 
  3. pag\login.aspx:<%@ page Language="VB" %> 
  4. pag\main.aspx:<%@ Page Language="VB" Explicit="true" Strict="true" %> 
  5. ... 

您已禁用調(diào)試?

檢查你的Web.config文件,并確保調(diào)試設(shè)置為false 節(jié)和檢查。aspx頁(yè),以確保調(diào)試設(shè)置為false。如果啟用了調(diào)試,編譯器不生成優(yōu)化的代碼和頁(yè)面批次編譯。您可以通過(guò)使用正則表達(dá)式的Findstr.exe進(jìn)行文件。aspx頁(yè)。

  1. C:\pag>findstr /i /r /c:"<%.*@.*page.*debug=.*true*.*%>" *.aspx  
  2. login.aspx:<%@ page Language="VB" Debug="True" %> 
  3. main.aspx:<%@ Page Language="c#" Debug="True" %> 

您已禁用跟蹤?

檢查您的Web.config文件,以確保在部分禁用跟蹤。另外,請(qǐng)檢查你的。aspx頁(yè),以確保跟蹤設(shè)置為false。您可以通過(guò)使用正則表達(dá)式的Findstr.exe進(jìn)行文件。aspx頁(yè)。

  1. C:\pag>findstr /i /r /c:"<%.*@.*page.*trace=.*true*.*%>" *.aspx  
  2. login.aspx:<%@ page Language="VB" Trace="True" %> 
  3. main.aspx:<%@ Page Language="c#" Trace="True" %> 

你積極的超時(shí)嗎?

設(shè)置超時(shí)積極相應(yīng)調(diào)整。評(píng)估每一頁(yè),并確定一個(gè)合理的超時(shí)。默認(rèn)頁(yè)是在Machine.config執(zhí)行超時(shí)屬性指定超時(shí)90秒。服務(wù)器資源舉行,直到請(qǐng)求被處理完全或執(zhí)行時(shí)間,以較早者為準(zhǔn)。在大多數(shù)情況下,用戶(hù)不必等待這樣一個(gè)長(zhǎng)時(shí)間才能完成的請(qǐng)求。他們要么完全放棄請(qǐng)求,或發(fā)送一個(gè)新的請(qǐng)求,這進(jìn)一步增加了服務(wù)器上的負(fù)載。

您使用視圖狀態(tài)?

使用下面的復(fù)習(xí)題,以評(píng)估您的應(yīng)用程序如何有效地使用視圖狀態(tài):

你禁用視圖狀態(tài)時(shí),它不需要?

每一頁(yè)的評(píng)估,以確定是否需要查看狀態(tài)啟用。視圖狀態(tài)會(huì)增加開(kāi)銷(xiāo)每個(gè)請(qǐng)求。開(kāi)銷(xiāo)包括增加頁(yè)面發(fā)送到客戶(hù)端,以及一個(gè)序列化和反序列化成本的大小。你不需要查看在下列條件下的狀態(tài):

頁(yè)面不回自己的頁(yè)面僅用于輸出和不依賴(lài)于響應(yīng)處理。

你的頁(yè)面的服務(wù)器控件不處理事件,你有沒(méi)有動(dòng)態(tài)的或數(shù)據(jù)綁定的屬性值(或他們是在每個(gè)請(qǐng)求的代碼)。

如果你忽略的舊數(shù)據(jù),并重新填充的服務(wù)器控制每次刷新頁(yè)面。

您已經(jīng)采取步驟,以減少您的視圖狀態(tài)的大小嗎?

評(píng)估每一頁(yè)的視圖狀態(tài)的使用。要確定一個(gè)頁(yè)面的視圖狀態(tài)的大小,您可以啟用跟蹤,看看每個(gè)每個(gè)控制如何使用它??刂瓶刂频幕A(chǔ)上,禁用視圖狀態(tài)。

你使用服務(wù)器控件嗎?

使用下面的復(fù)習(xí)題,檢討如何有效地你的ASP.NET應(yīng)用程序使用服務(wù)器控件:

你使用服務(wù)器控件時(shí),你不需要嗎?

評(píng)估您的服務(wù)器控件的使用,以確定是否可以替換他們具有重量輕HTML控件或可能是靜態(tài)的文本。你也許可以在下列情況下更換一個(gè)服務(wù)器控件:

在控制顯示的數(shù)據(jù)是靜態(tài)的,例如,一個(gè)標(biāo)簽。

你并不需要以編程方式訪(fǎng)問(wèn)在服務(wù)器端控制。

控制顯示的是只讀數(shù)據(jù)。

在回處理過(guò)程中不需要控制。

你有服務(wù)器控制的深層次嗎?

服務(wù)器控件嵌套很深的層次復(fù)合的建設(shè)控制樹(shù)成本。考慮呈現(xiàn)的內(nèi)容自己使用Response.Write或建立一個(gè)自定義的控制,并呈現(xiàn)。要確定的控制和控制層次,使頁(yè)面的跟蹤。

您從您的ASPX頁(yè)面訪(fǎng)問(wèn)數(shù)據(jù)嗎?

大多數(shù)ASP.NET應(yīng)用程序需要某種形式的數(shù)據(jù)訪(fǎng)問(wèn)。數(shù)據(jù)訪(fǎng)問(wèn)的性能和可擴(kuò)展性問(wèn)題發(fā)現(xiàn)一個(gè)共同的地方。審查以下問(wèn)題,以幫助改善您的應(yīng)用程序的頁(yè)面級(jí)別的數(shù)據(jù)訪(fǎng)問(wèn):

你頁(yè)大的結(jié)果集?

確定您的應(yīng)用程序領(lǐng)域,大的結(jié)果集顯示和考慮分頁(yè)的結(jié)果。大的結(jié)果集顯示給用戶(hù),可以對(duì)性能有顯著影響。

你使用數(shù)據(jù)集時(shí),你可以使用DataReaders嗎?

如果你不需要緩存數(shù)據(jù),層與層之間或數(shù)據(jù)的交換數(shù)據(jù)綁定到一個(gè)控制和只需要只進(jìn),只讀訪(fǎng)問(wèn)數(shù)據(jù),然后使用DataReader,而不是。

您可以使用數(shù)據(jù)綁定嗎?

使用下面的復(fù)習(xí)題,審查代碼的數(shù)據(jù)綁定使用:

你用的Page.DataBind嗎?

避免調(diào)用的Page.DataBind和單獨(dú)的每個(gè)控件綁定優(yōu)化您的數(shù)據(jù)綁定。調(diào)用的Page.DataBind遞歸調(diào)用上的每個(gè)頁(yè)面上的控件的DataBind。

你使用的DataBinder.Eval嗎?

DataBinder.Eval的使用反射,從而影響性能。在大多數(shù)情況下,DataBinder.Eval的被稱(chēng)為從一個(gè)頁(yè)面內(nèi)多次,因此,實(shí)施替代方法提供了一個(gè)很好的機(jī)會(huì),以提高性能。

避免以下做法:

  1. <itemtemplate> 
  2. <table><tbody><tr> 
  3. <td><%# DataBinder.Eval(Container.DataItem,"field1") %></td> 
  4. <td><%# DataBinder.Eval(Container.DataItem,"field2") %></td> 
  5. </tr></tbody></table> 
  6. </itemtemplate> 

使用顯式轉(zhuǎn)換。它提供了更好的性能,避免反射的成本。投作為一個(gè)DataRowView Container.DataItem,如果數(shù)據(jù)源是DataSet。

  1. <itemtemplate> 
  2. <table><tbody><tr> 
  3. <td><%# ((DataRowView)Container.DataItem)["field1"] %></td> 
  4. <td><%# ((DataRowView)Container.DataItem)["field2"] %></td> 
  5. </tr></tbody></table> 
  6. </itemtemplate> 

投作為一個(gè)String Container.DataItem如果數(shù)據(jù)源是一個(gè)數(shù)組或一個(gè)ArrayList。

  1. <itemtemplate> 
  2. <table><tbody><tr> 
  3. <td><%# ((String)Container.DataItem)["field1"] %></td> 
  4. <td><%# ((String)Container.DataItem)["field2"] %></td> 
  5. </tr></tbody></table> 
  6. </itemtemplate> 

aspx頁(yè)面調(diào)用非托管代碼嗎?

使用下面的復(fù)習(xí)題,審查代碼的互操作性使用:

你有沒(méi)有啟用調(diào)用STA COM組件ASPCOMPAT嗎?

確保任何頁(yè)面調(diào)用STA COM組件ASPCOMPAT頁(yè)面級(jí)別屬性設(shè)置。這將指示ASP.NET使用STA線(xiàn)程池線(xiàn)程來(lái)執(zhí)行當(dāng)前頁(yè)面的請(qǐng)求。默認(rèn)情況下,ASP.NET使用MTA線(xiàn)程池來(lái)處理頁(yè)面請(qǐng)求。如果您正在使用STA元件,組件綁定到創(chuàng)建的線(xiàn)程。這將導(dǎo)致一個(gè)從線(xiàn)程池中的線(xiàn)程STA對(duì)象是創(chuàng)建的線(xiàn)程昂貴的線(xiàn)程切換。

你創(chuàng)建STA COM組件在頁(yè)面的構(gòu)造?

檢查您的網(wǎng)頁(yè),以確保您沒(méi)有創(chuàng)建STA COM組件在頁(yè)面的構(gòu)造。創(chuàng)建STA組件中的Page_Load,Page_Init或其他事件,而不是。頁(yè)面的構(gòu)造函數(shù)總是一個(gè)MTA線(xiàn)程上執(zhí)行。當(dāng)STA COM組件是從一個(gè)MTA線(xiàn)程創(chuàng)建,創(chuàng)建STA COM組件在主機(jī)上的STA線(xiàn)程。在同一個(gè)線(xiàn)程(主機(jī)STA)執(zhí)行單元線(xiàn)程組件從MTA線(xiàn)程創(chuàng)建的所有實(shí)例。這意味著,即使所有的用戶(hù)都有他們自己的COM組件實(shí)例的引用,所有到這些組件的調(diào)用序列化這一個(gè)線(xiàn)程,并在同一時(shí)間只有一個(gè)呼叫執(zhí)行。這將有效地瓶頸一個(gè)單獨(dú)的線(xiàn)程的頁(yè)面,并造成重大的性能下降。如果您使用的是AspCompat屬性,這些事件運(yùn)行一個(gè)線(xiàn)程使用STA線(xiàn)程池,它在一個(gè)較小的性能結(jié)果擊中由于線(xiàn)程切換。

你用Server.Create對(duì)象嗎?

避免使用Server.CreateObject和早期綁定到您的組件在編譯時(shí)盡可能。Server.CreateObject的使用后期綁定,主要是為了向后兼容提供。搜索您的代碼庫(kù),看看是否使用這個(gè)例程,作為替代,創(chuàng)建互操作程序集,利用早期綁定的優(yōu)勢(shì)。

你有沒(méi)有審查Machine.config中的設(shè)置嗎?

使用下面的復(fù)習(xí)題,審查您的應(yīng)用程序的部署計(jì)劃:

調(diào)整適當(dāng)?shù)木€(xiàn)程池?

CLR線(xiàn)程池調(diào)整適當(dāng)?shù)恼{(diào)整,提高了性能顯著。在部署應(yīng)用程序之前,確保該線(xiàn)程池已調(diào)整為您的應(yīng)用程序。

適當(dāng)配置的內(nèi)存限制?

配置ASP.NET內(nèi)存限制,確保最佳的ASP.NET緩存的性能和服務(wù)器的穩(wěn)定性。在IIS 5.0中,或者當(dāng)您使用在IIS 6.0的ASP.NET進(jìn)程模型,配置Machine.config中的內(nèi)存限制。在IIS 6.0中,您使用IIS MMC管理單元中配置的內(nèi)存限制。

你刪除不必要的HttpModules?

包括的HttpModules,你不需要添加額外的開(kāi)銷(xiāo)ASP.NET請(qǐng)求處理。檢查您已刪除或注釋掉在未使用的HttpModules 的Machine.config。

原文:http://www.cnblogs.com/caltion/archive/2011/10/12/2208283.html

【編輯推薦】

  1. ASP.NET MVC會(huì)成為ASP.NET未來(lái)主流的UI平臺(tái)?
  2. ASP.NET性能優(yōu)化之構(gòu)建自定義文件緩存
  3. 想愛(ài)容易相處難:當(dāng)ASP.NET MVC愛(ài)上IoC
  4. 導(dǎo)致ASP.NET站點(diǎn)重啟的十大原因
  5. 淺談ASP.NET核心對(duì)象
責(zé)任編輯:陳貽新 來(lái)源: caling的博客
相關(guān)推薦

2009-08-05 15:13:32

使用Cache提高AS

2009-07-20 17:07:30

提高ASP.NET性能

2009-07-24 16:40:14

ASP.NET軟件開(kāi)發(fā)

2010-05-07 08:59:50

ASP.NET

2011-07-06 08:46:30

2009-07-29 11:33:14

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

2024-06-11 09:00:00

異步編程代碼

2011-07-07 09:03:12

ASP.NET

2009-08-03 14:22:33

什么是ASP.NET

2009-07-28 17:17:19

ASP.NET概述

2009-07-22 17:45:35

ASP.NET教程

2024-12-05 08:14:41

2009-08-13 15:49:18

ASP.NET性能優(yōu)化

2011-10-19 09:41:15

ASP.NET性能優(yōu)化

2024-09-10 08:13:16

Asp項(xiàng)目輕量級(jí)

2009-08-13 16:22:18

ASP.NET性能優(yōu)化

2012-05-16 10:24:26

ASP.NET性能優(yōu)化

2009-05-13 09:08:47

ASP.NETLINQLINQ to SQL

2009-07-27 12:22:03

ASP.NET和ASPASP.NET入門(mén)教程

2009-08-10 13:32:15

ASP.NET TimASP.NET組件設(shè)計(jì)
點(diǎn)贊
收藏

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