程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 改進.NET應用程序的性能和可伸縮性(一)-概述及ADO.NET 性能

改進.NET應用程序的性能和可伸縮性(一)-概述及ADO.NET 性能

編輯:關於.NET

可能翻譯有誤或者理解不對的地方,我用紅色標注出來,大家可在評論中進行指正和討論,我最後會 更新到列表中去,謝謝。

內容

概述

設計類清單

應用程序系列清單

數據庫服務器清單

概述

這是一個改進.net應用程序性能和可伸縮性的清單,它可以幫助你把這些信息應用到你的實際行動中 去(譯注:這個句子太長,翻譯不了),

下面的列表包括:

清單:ADO.NET 性能

清單:Review架構和設計的性能和可伸縮性

清單:ASP.NET 性能

清單:企業服務性能

清單:互操作性能

清單:托管代碼性能

清單:Remoting性能

清單:SQL Server性能

清單:Web服務性能

清單:XML 性能

設計類清單

清單:為性能和可伸縮性做架構和設計的Review,可以幫助你檢查應用程序在架構和可伸縮性的各個 方面。這個列表包括部署和架構,數據結構和算法,通信,資源管理,緩存,狀態管理,並發,耦合和內 聚,數據訪問,異常處理,以及類設計上的考慮。

應用程序系列清單

應用程序系列清單中的每一個列表都包含性能和可伸縮性的檢查,具體到每個技術細節的性能和可擴 展框架,這個系列包括如下清單:

清單:ADO.NET 性能

清單:Review架構和設計的性能和可伸縮性

清單:ASP.NET 性能

清單:企業服務性能

清單:互操作性能

清單:托管代碼性能

清單:Remoting性能

清單:SQL Server性能

清單:Web服務性能

清單:XML 性能

數據庫服務器清單

清單:SQL Server性能幫助你審查改進您的SQL Server的性能和可擴展性的關鍵點。這個清單包括向 上擴容和平面擴容(譯注:scaling up and scaling out,所謂Scale up就是向上擴容,Scale out就是 平面型的擴容。兩種擴容的方式分別從兩個維度來解決數據庫壓力,縱向的擴容就是將DB Server的配置 提高,增加硬件配置,通過硬件速度提升來解決訪問壓力,橫向擴容就是將應用的數據拆分,將原來集中 存儲的數據根據一定的規則分布到不同的物理數據庫服務器上。 http://gocom.primeton.com/modules/newbb/item43643_43643.htm),部署,查詢,索引,事務,存儲 過程,查詢計劃,查詢計劃重編譯,SQL XML,微調(譯注:可能是調整一些SQL的配置等),測試和監控 。

清單: ADO.NET 性能

設計上的考慮

Design your data access layer based on how the data is used.

在你的數據如何使用的基礎上設計你的數據庫訪問層。

Cache data to avoid unnecessary work.

緩存數據以避免不必要的工作。

Connect by using service accounts.

使用服務帳戶連接數據庫(譯注:不要用SA)。

Acquire late, release early.

盡量晚的獲取,盡量早的釋放(譯注:指數據庫連接,緩存數據等)。

Close disposable resources.

及時關閉可釋放的資源。

Reduce round trips.

減少不必要的來回(譯注:有些操作使用一條查詢語句就能返回,不要變成多次查詢數據庫,會加大 網絡流量及數據庫壓力)。

Return only the data you need.

只返回你需要的數據(譯注:不要使用Select *,應只選擇自己需要的列)

Use Windows authentication.

使用windows認證(譯注:用數據庫認證性能好,用windows認證安全,好像是)。

Choose the appropriate transaction type.

選擇適當的事務類型(譯注:事務隔離級別有四種,默認是Read Committed)。

Use stored procedures.

使用存儲過程(譯注:這個有爭議,具體看情況)。

Prioritize performance, maintainability, and productivity when you choose how to pass data across layers.

當你選擇讓數據傳遞多層的話,盡量考慮性能,可維護性和生產力(譯注:productivity這個形容詞 不知道具體指啥)。

Consider how to handle exceptions.

考慮如何處理異常(譯注:SQL裡也有try和select @@error)。

Use appropriate normalization.

使用合適的范式(譯注:不是范式越高,性能就越好,看具體情況)。

微軟.NET數據庫庫驅動程序

Use System.Data.SqlClient for Microsoft SQL Server? 7.0 and later.

為SQL Server7.0及以上的數據庫版本使用System.Data.SqlClient。

Use System.Data.OleDb for SQL Server 6.5 or OLE DB providers.

為SQL Server 6.6或者OLE DB providers使用System.Data.OleDb

Use System.Data.ODBC for ODBC data sources.

為ODBC數據源使用System.Data.ODBC

Use System.Data.OracleClient for Oracle.

為Oracle使用System.Data.OracleClient

Use SQLXML managed classes for XML data and SQL Server 2000.

為XML數據和SQL Server 2000使用SQLXML

數據庫連接

Open and close the connection in the method.

在方法裡打開和關閉數據庫連接。(譯注:用的時候打開,不用的時候趕緊關了,關了就自動入池了 。)

Explicitly close connections.

顯式的關閉數據庫連接(譯注:不要等著GC給你回收數據庫連接)。

When using DataReaders, specify CommandBehavior.CloseConnection.

如果使用DataReaders,指定CommandBehavior.CloseConnection參數(譯注:貌似是關閉reader的時 候會自動關閉連接)。

Do not explicitly open a connection if you use Fill or Update for a single operation.

如果你為一個單獨的操作填充或更新數據,不要顯式的打開數據庫連接(譯注:估計是說DataAdapter ,Fill的時候會自動打開數據庫連接)。

Avoid checking the State property of OleDbConnection.

避免檢查OleDbConnection的State屬性。

Pool connections.

使用數據庫連接池。

命令

Validate SQL input and use Parameter objects.

驗證數據庫的輸入,使用參數對象(譯注:使用參數化查詢,否則可能會引起更多的執行計劃重編譯 )。

Retrieve only the columns and rows you need.

只選擇你需要的行和列。

Support paging over large result sets.

讓大型結果集分頁。

Batch SQL statements to reduce round trips.

用批語句來減少不必要的來回。

Use ExecuteNonQuery for commands that do not return data.

如果不需要返回數據,為命令使用ExecuteNonQuery方法。

Use ExecuteScalar to return single values.

用ExecuteScalar方法返回單一值。

Use CommandBehavior.SequentialAccess for very wide rows or for rows with binary large objects (BLOBs).

為非常寬的列及二進制大對象使用CommandBehavior.SequentialAccess參數。

Do not use CommandBuilder at run time.

存儲過程

Use stored procedures.

使用存儲過程。

Use CommandType.Text with OleDbCommand.

把OleDbCommand.和CommandType.Text一起用(譯注:不明白OleDbCommand為什麼就要用Text)。

Use CommandType.StoredProcedure with SqlCommand.

把SqlCommand和CommandType.StoredProcedure一起使用(譯注:不用CommandType.StoredProcedure 就不能執行存儲過程了吧)。

Consider using Command.Prepare.

考慮使用Command.Prepare(譯注:沒用過)。

Use output parameters where possible.

在可能的情況下使用輸出參數。

Consider SET NOCOUNT ON for SQL Server.

考慮為SQL Server設置NOCOUNT配置項(譯注:不知有何用。)。

參數

Use the Parameters collection when you call a stored procedure.

調用存儲過程時使用參數集合。

Use the Parameters collection when you build SQL statements.

建立SQL語句的時候使用參數集合。

Explicitly create stored procedure parameters.

顯式創建存儲過程參數。

Specify parameter types.

指定參數類型。

Cache stored procedure SqlParameter objects.

緩存存儲過程的SqlParameter對象。

DataReader

Close DataReader objects.

記著關閉DataRader對象。

Consider using CommandBehavior.CloseConnection to close connections.

考慮使用CommandBehavior.CloseConnection來關閉數據庫連接。

Cancel pending data.

取消未完成的數據(譯注:不太明白具體指什麼場景)。

Consider using CommandBehavior.SequentialAccess with ExecuteReader.

考慮為ExecuteReader方法使用CommandBehavior.SequentialAccess參數(譯注:選取列比較寬的時候 )。

Use GetOrdinal when using an index-based lookup.

當使用基於索引的查找時用 DataReader.GetOrdinal方法(譯注;可能翻譯有誤)。

DataSet

Reduce serialization.

減少序列化。

Use primary keys and Rows.Find for indexed searching.

為索引搜索使用主鍵和Rows.Find方法(譯注:可能翻譯有誤)。

Use a DataView for repetitive non-primary key searches.

為非主鍵的搜索使用DataView對象(譯注:先 從數據庫選出數據,然後再內存裡用DataView再篩選數據)。

Use the optimistic concurrency model for datasets.

為Dataset使用樂觀並發模型。

XML和DataSet對象

Do not infer schemas at run time.

不要再運行時推演 XML的Schema(譯注 :不明白具體指啥)。

Perform bulk updates and inserts by using OpenXML.

使用OpenXML方法 執行批量更新和插入。

類型

Avoid unnecessary type conversions.

避免不必要的類型轉換(譯注:不明白具體場景) 。

異常管理

Use the ConnectionState property.

使用ConnectionState屬性(譯注:使用 ConnectionState干啥?)。

Use try/finally to clean up resources.

使用try/finally塊來清理 資源。

Use specific handlers to catch specific exceptions.

捕獲具體異常的時候使用具體的 handlers。

事務

Use SQL transactions for server controlled-transactions on a single data store.

在單一的數據存儲上為服務器事務控制使用SQL事務(譯注:翻譯可能有誤,可能是T-SQL的事務,如 begin tran語句)。

Use ADO.NET transactions for client-controlled transactions on a single data store.

在單一的數據存儲上為客戶端事務控制使用ADO.NET的事務(譯注:ADO.NET裡有 SQLTransaction對象)。

Use Distributed Transaction Coordinators (DTC) for transactions that span multiple

為跨越多個服務的事務使用DTC。

數據存儲

Keep transactions as short as possible.

保持事務盡可能短。

Use the appropriate isolation level.

使用合適的隔離級別。

Avoid code that can lead to deadlock.

避免代碼導致死鎖。

Set the connection string Enlist property to false.

把數 據庫連接字符串的Enlist屬性設置為false(譯注:不知有何用)。

二進制大對象

Use CommandBehavior.SequentialAccess and GetBytes to read data.

用 CommandBehavior.SequentialAccess和GetBytes讀取數據。

Use READTEXT to read from SQL Server 2000.

使用READTEXT從SQL Server 2000讀取數據。

Use OracleLob.Read to read from Oracle databases.

使用OracleLob.Read從ORACLE數據庫裡讀取數據。

Use UpdateText to write to SQL Server databases.

使用UpdateText把數據寫到SQL Server數據庫。

Use OracleLob.Write to write to Oracle databases.

使用OracleLob.Write把數據寫到Oracle數據庫。

Avoid moving binary large objects repeatedly.

避免重復移動二進制大數據。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved