ASP.NET錯誤處理和程式最佳化

來源:互聯網
上載者:User
議程
.錯誤類型以及處理方式
.提高資料訪問效能
.伺服器控制項的使用
.緩衝的使用
.提高效能的實用技巧

錯誤類型以及處理方式
1、錯誤的類型
.剖析器錯誤
–語法錯誤:文法有問題
–邏輯錯誤:除0錯誤、類型不符、不正確輸出、
使用不正確的對象、處理無效的資料
.編譯錯誤:使用了不能被語言編譯器識別,
但ASP.NET能識別的關鍵字或語句時發生的
錯誤
.執行階段錯誤
.配置錯誤:Web.config檔案出錯

2、錯誤的處理
.使用驗證控制項
.編程處理
–校正語句
    校正(checked)和非校正(unchecked)語句

–try...catch...finally

    try{block}
    catch(FormatException){response.write("格式錯誤");}
    catch(OverflowException ){response.write("溢出");}
    catch(Exception ex){ex.Message.ToString();}

    一些常用的引發異常:

       FormatException 當參數格式不符合調用的方法的參數規範時引發的異常。

       ArithmeticException .因算術運算、類型轉換或轉換操作中的錯誤而引發的異常。

       OverflowException (繼承ArithmeticException )在選中的上下文中所進行的算術運算、類型轉換或轉換操作導致溢出時引發的異常。

       DivideByZeroException (繼承ArithmeticException )試圖用零除整數值或十進位數值時引發的異常。

–Page_Error

     Page對象的Error事件
     .使用模板
     void Page_Error(object sender,EventArgse)
     {
         Response.Write(“發生錯誤:”+Server.GetLastError().ToString());
         Server.ClearError();
     }
–Application_Error 在應用程式設定檔中,為應用程式執行的聲明性錯誤處理

     Appliation對象的Error事件
    .應用程式中任何頁面拋出異常都會調用
    .在global.asax中
    .形式為:
    void Application_Error(object sender,EventArgse)
    { ...}

DEMO2
編寫到windows錯誤記錄檔
把錯誤發送郵件到管理員

利用設定檔處理錯誤
.ASP.NET同以前的ASP一樣,當伺服器上發生了一個運
行時間或編譯時間錯誤時,就會產生一個html 錯誤頁面。
但是與ASP不同,ASP.NET格外關注的是:要確保在默
認狀態下,不會因為這個錯誤的發生而泄露“安全”資訊。
.<system.web>
<customErrorsdefaultRedirect="url"mode="RemoteOn
ly">
<errorstatusCode="code"redirect="url"></error>
</customErrors>
</system.web>

議程
.錯誤類型以及處理方式
.提高資料訪問效能
.伺服器控制項的使用
.緩衝的使用
.提高效能的實用技巧

效能引言
.是
–XmlDocumentLoadXML(stringstrFileID) // 加
載XML
–boolCheckIDExisit(stringstrFileID,stringstrID)
//判斷節點是否存在
.還是
–boolCheckIDExisitByXml(string strXml,stringstrID) //判斷節點是否存在
–或boolCheckIDExisitByXml(XmlDocumentobjXml,stringstrID) // 判斷節點是否存在

邏輯設計

. 建議: 採用3層邏輯模型
– Pages (.aspx) and User Controls (.ascx) UI
– Business and Data Access classes in \bin dir
– Data within a SQL Database via SPROCs

使用最佳的Data Provider
.ADO.NET 可支援多個Provider:
–System.Data.SqlClient
–System.Data.OracleClient
–System.Data.OleDb
–System.Data.Odbc
.所有Provider的編程模型相同
–但是效能方面存在明顯差異
.建議:使用最佳Provider
–在訪問MSDE/SQL 時始終使用SqlClient
–在訪問Oracle 時始終使用OracleClient

Data Provider測試
.方案:
–從SQL Northwinds 資料庫中抽取50 行
–<%= %> html 表格格式化技術
.衡量的三種技術(不同的Data Provider ):
–傳統ASP/ADO
–ASP.NET w/ System.Data.OleDb 供應商
–ASP.NET w/ System.Data.SqlClient 供應商

0
100
200
300
400
500
600
700
800
900
傳統 ASP/ ADO 帶 OLEDB 的
ASP.NET
帶 SQL 的 ASP.NET
請求/秒(4P 服務)
資料效能測試

DataReaders 和DataSets
.DataReader
–對查詢的結果提供了單向讀取的操作
–輕量快速–但在Reader為關閉之前始終處於串連狀態
.DataSet
–非連結的資料訪問方式
–內部使用DataReader用於擷取資料
–在完成DataSet的擷取後會自動關閉DataReader
.如何選擇?
–依賴於您的應用
–般情況下,讀取大量資料,對返回資料不做大量處理用
SqlDataReader.對返回資料大量處理用datset比較合

DataReader ?DataSet
通常情況下DataReader比
DataSet快16%!!

ExecuteNonQuery和ExecuteScalar
.ExecuteNonQuery
–對資料的更新不需要返回結果集
–由於不返回結果集可省掉網路資料轉送。它僅僅返回受影響
的行數。如果只需更新資料用ExecuteNonQuery效能的開銷
比較小。
.ExecuteScalar
–它只返回結果集中第一行的第一列。使用ExecuteScalar 方
法從資料庫中檢索單個值(例如id號)。
–與使用ExecuteReader 方法,返回的資料執行產生單個值所
需的操作相比,此操作需要的代碼較少
.如何選擇?
–只需更新資料用ExecuteNonQuery.單個值的查詢使用
ExecuteScalar

資料的綁定DataBinder
.一般的Binder 方法<%#
DataBinder.Eval(Container.DataItem, “欄位名”)
%>用DataBinder.eval 綁定不必關心資料來源
(Dataread或dataset)。不必關心資料的類型eval
會把這個資料對象轉換為一個字串。在底層綁
定做了很多工作,使用了反射效能。正因為使用
方便了,但卻影響了資料效能。
.直接轉換成DataRowView的話,將會給效能帶來
很大提升:
.<@% ((DataRowView)Container.DataItem)["字
段名"] %>

串連池
.ADO.NET 擁有內建的串連池
–自動緩衝/重新使用串連
–不必為此編寫任何代碼
.代碼建議:
–“在後期開啟代碼中的串連,然後在早期將其
關閉”
–切勿長時間保持串連狀態
–完成後應立即顯示地關閉資料庫連接,以將其返
回至池中

串連池
.最佳化提示:
–不同的連接字串可以產生多個不同的串連池
–在Web.Config 中儲存單個連接字串
–使用ConfigurationSettings.AppSettings,以在運
行時採用編程形式對其進行訪問
.始終應明確關閉資料連線,避免串連泄漏
–否則串連將在下一次垃圾收集之前保持開啟狀態
–泄露串連會顯著降低效能

使用預存程序
.建議將SPROC 用於資料存取
–通過DBA 進行更輕鬆的效能調試
–通過使用資料庫交易處理避免出現分布事務成本
–有助於防止SQL 插入式攻擊
–有助於消除應用與資料庫反覆調用的成本
.有趣的提示:
–可以通過企業管理器來關閉動態SQL 支援,以強制使用
SPROC

DEMO3
使用串連池最佳化程式

議程
.錯誤類型以及處理方式
.提高資料訪問效能
.伺服器控制項的使用
.緩衝的使用
.提高效能的實用技巧

伺服器控制項
.提供了清晰的編程模型(重用,簡潔,宜用)
–建立ASP.NET 頁面所倡導的模式
.對效能最佳化而言有兩點需要注意:
–ViewState
–控制項數量

ViewState 管理

. ASP.NET controls 能夠維護頁面Control元素的狀態
– 狀態以“viewstate” hidden field進行傳遞
. 負面影響:
– 增加網路負荷(both on render and postback)
– 額外的伺服器效能消耗(serialize values to/from viewstate)
. Viewstate靈活性:
– 頁面級(Can disable viewstateentirely for a page )
– 控制項級(Can disable viewstateusage on a per control basis )
. 建議:
– 認真審核該功能的使用
– 若不使用PostBack功能,請在頁面級屏蔽ViewState
– PostBack時每次都重建控制項,請對控制項級的ViewState屏蔽
– 使用<%@ Page Trace=“true” %>跟蹤ViewState的大小

有關ViewState管理提示
.如果您希望更明確的限制viewstate 的使用,可將
ASP.NET 配置為預設情況下處於關閉狀態
.Machine.config:
<configuration>
<system.web>
<pages enableViewState=“false”/>
</system.web>
</configuration>
.之後需要viewstate 的頁將在頁面指令中手動對其進
行設定:
–<%@ Page EnableViewState=“true”%>

產生的控制項數量
.頁面上的每個伺服器控制項的產生都存在固定的
成本
–每個控制項的成本通常可以忽略不計
.複合控制項有時可以屏蔽使用的控制項數量,儘管
會出現以下情況
–聚整合本有時可以累加
–開啟ASP.NET Trace即可查看實際計數

議程
.錯誤類型以及處理方式
.提高資料訪問效能
.伺服器控制項的使用
.使用緩衝進行程式最佳化
.提高效能的實用技巧

緩衝技術
1、什麼是緩衝技術?
緩衝是電腦快速地再次獲得資料地方式。
2、緩衝原理
將經常訪問地資料存放區到電腦可以更快、
更容易地讀取地位置。

3、ASP.NET中緩衝的位置
用戶端緩衝
客戶
伺服器
①從伺服器讀取資料
②緩衝到硬碟
③以後訪問讀取
硬碟資料

伺服器緩衝
伺服器 ASP.NET 引擎
ASP.NET 引擎
客戶
③隨後的請求直接
從緩衝中取資料
①從ASP.NET 中發送資料
②快取資料

4、什麼時候用緩衝?
不要緩衝使用者隨時都會
修改的對象,如購物車
不要緩衝包含時間的頁

緩衝整個應用程式都要
使用的設定或對象(但
這些設定和對象必須在
其生存期內不變化)
不要緩衝個人資訊,以
防止別人盜用
緩衝那些經常被訪問、
並且變化不大的資料
不應該使用緩衝的情況使用緩衝的情況

5、如何使用緩衝?
.ASP.NET有兩種用於WEB應用的緩衝技術:輸
出緩衝和資料緩衝。
–輸出緩衝指:把一次請求所產生的動態輸出儲存於內
存中。
–資料緩衝指:按照一定的策略把事先不確定的對象保
存於記憶體中。
.輸出緩衝的使用
–使用@OutputCache指令
–例如(添加在頁頭)
<%@ OutputCacheDuration= “10”VaryByParam=“None”%>

DEMO4
輸出緩衝練習

資料緩衝
.ASP.NET提供了一個相當出色的緩衝引擎
機制,它允許頁面儲存和索引HTTP請求所
要求的各種各樣的對象。ASP.NET的緩衝
對各個應用來說是私人的,是儲存各種對
象的儲存空間。緩衝的生存周期取決於應用
的生存周期,也就是說,當應用重新啟動
時,緩衝實際上也已重建。

.資料緩衝
–使用(類似於Session變數的使用)
Cache[“userName”] = “MeMe”;
Response.Write(Cache(“userName”));
–注意不能通過下標訪問緩衝中的變數,如
Response.Write(Cache[0]);是錯誤的。
–緩衝的刪除
Cache.Remove(“userName”);

.使用緩衝依存關係
–緩衝變數的添加
.Cache.Add()
.Cache.Insert()
它們功能相同,但Insert更加靈活一些
–Insert
(key,value,dependencies,absoluteExpiration,
slidingExpiration,priority,priorityDecay,onRem
oveCallBack)

緩衝替換策略
1. “腐爛搜尋”(Scavenging)
.當記憶體變得比教緊張時,緩衝機制會找出最
不常用和最不重要的對象,把它從記憶體中移
出,以減輕系統壓力。
2. “到期控制”(Expiration)
.編程者可以指定緩衝對象的生存周期,這種
指定的時間可以是絕對的也可以是相對的。
3. “檔案和索引值依賴”
.從外部檔案或者是其他緩衝索引值是否改變,
來決定本身索引值是否有效。

DEMO5

資料緩衝

議程
.錯誤類型以及處理方式
.提高資料訪問效能
.伺服器控制項的使用
.使用緩衝進行程式最佳化
.提高效能的實用技巧

提高效能的實用技巧
.不要使用不必要的Session,和ASP中一樣,
在不必要的時候不要使用Session
.不使用不必要的Server Control
.不使用不必要的ViewState
.不要用Exception控製程序流程
.禁用VB和Jscript動態資料類型
.使用預存程序完成資料訪問
.唯讀資料訪問不要使用DataSet
.關閉ASP.NET的Debug模式
.使用ASP.NetOutput Cache 緩衝資料

提高效能的實用技巧
.盡量用SQL返回DataGrid需要綁定的DataSet,盡量不
要對DataSet進行二次加工,特別不要對DataSet進
行大量刪除,實踐證明這很慢。不如複製部分資料。
.盡量把查詢資料的資料庫操作次數壓縮到最少,盡量
1-2次資料庫操作就可完成;
.注意最佳化資料庫查詢操作
.不要在頁面載入時預設選擇全部資料,儘管可以方便
後續操作,但使用者會以為“還沒有操作就這麼慢”
.建議盡量用比較高效的SQL代替後續複雜的DataSet
二次加工

提高效能的實用技巧
.僅在需要的時候開啟資料庫連接
.一旦資料庫操作完畢,一定關閉串連
.在關閉串連時記得刪除臨時對象
.在關閉串連前,確保關閉任何使用者定義事務
.顯示非互動性資料,使用SQLDataReader可以獲得
最佳效能
.注意共用那些經過複雜處理或漫長查詢才得到的資料
.在頁面跳轉時記得終止當前頁面的處理
.有大量串連的字串操作不要使用+,改用
StringBuilder

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.