ASP.NET錯誤處理和程序優化

發表于:2008-05-06來源:作者:點擊數: 標簽:程序優化NetNETASPnet
議程 .錯誤類型以及處理方式 .提高數據訪問性能 .服務器控件的使用 .緩存的使用 .提高性能的實用技巧 錯誤類型以及處理方式 1、錯誤的類型 .分析程序錯誤 –語法錯誤:語法有問題 –邏輯錯誤:除0錯誤、類型不匹配、不正確輸出、 使用不正確的對象、處理無效

議程
  .錯誤類型以及處理方式
  .提高數據訪問性能
  .服務器控件的使用
  .緩存的使用
  .提高性能的實用技巧

  錯誤類型以及處理方式
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 Aclearcase/" target="_blank" >ccess 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
.一般的綁定方法<%#
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

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97