增進資料集序列化和遠端效能

文章翻譯 文章翻譯
文章編號: 829740 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

結論

本文將告訴您,如何將較大的 .NET Framework System.Data.DataSet 類別的效能最佳化,並提供一個序列化包裝函式類別範例,這個範例已進行最佳化,可以提高序列化及還原序列化較大 DataSet 類別的效率。

其他相關資訊

當您在處理序之間傳遞 System.Data.DataSet 物件時,會使用 .NET Framework Remoting 來序列化、傳輸及還原序列化 DataSet 類別。如果您從 .NET Web 服務傳回 DataSet 類別,在內部會使用 Microsoft .NET Framework System.Xml.Serialization.XMLSerializer 類別將 DataSet 資料序列化回到用戶端。如果您從裝載於 COM+ 中的 Managed 物件將 DataSet,傳回,.NET Framework Remoting 便會使用 BinaryFormatter 類別。不論 .NET Framework 使用何種遠端機制,當序列化資料時,DataSet 類別都會將內部資料轉換成 XML。

Microsoft .NET Framework 1.0 和 .NET Framework 1.1 隨附的 DataSet 類別,可以有效率地透過 .NET Framework Remoting 將 DataSet 中的小量資料 (數百列) 進行序列化。但這個序列化機制在處理較大的 DataSet (數千列) 時將失去效率,並且需要龐大的暫時性 (短暫的) 記憶體配置。這些記憶體配置會降低應用程式延展性。

注意 暫時性記憶體配置指的是在處理程式碼的部分區段時所發生的短暫記憶體配置。因此,在 DataSet 類別的序列化期間、遠端期間以及還原序列化期間,.NET Framework Remoting 會在內部配置及解除配置各種不同的 Managed 物件,以處理遠端要求。配置及解除配置越來越大的 Managed 物件會對 .NET 記憶體管理系統造成額外的壓力,並降低整體延展性。例如,應用程式如果擁有許多會產生龐大暫時性記憶體配置的 in-flight 方法引動過程,可能會在完成所有方法呼叫之前便會耗盡記憶體。

您可以使用設計正確的 Surrogate 類型或序列化包裝函式類別,大幅增進較大 DataSets 的序列化和遠端效能。如需有關搭配 .NET Framework DataSet 類別使用 Surrogate 機制或包裝函式機制 (或兩者) 的詳細資訊,請至下列 Microsoft Developer Network (MSDN) 網站:
http://msdn.microsoft.com/msdnmag/issues/02/12/cuttingedge
但本文並不提供實作 DataSet Surrogate 類型或序列化包裝函式類別的完整範例。

本文包含經過最佳化的序列化包裝函式類別範例,可更有效地序列化和還原序列化較大的 DataSet。這個類別可以在遠端處理的一般 DataSet 時大幅降低暫時性記憶體配置。大幅降低暫時性記憶體配置也可以增進使用較大的 DataSet 時,遠端處理端對端的時間,並增進延展性。

範例提供一個名為 DataSetSurrogate 的序列化包裝函式類別。DataSetSurrogate 類別用來做為您要進行遠端處理的 DataSet 的包裝函式類別。伺服器元件會將您要的 DataSet 傳送至 DataSetSurrogate 建構函式,然後再將 DataSetSurrogate 類別傳回用戶端。在用戶端則會使用 DataSetSurrogate.ConvertToDataSet 方法從 DataSetSurrogate 類別來擷取 DataSet

DataSetSurrogate 類別會標示為 Serializable (可序列化),且 DataSetSurrogate 類別中的所有欄位也都是可序列化的類別。因此,當您遠端處理 DataSetSurrogate 物件時,遠端基礎結構會自動序列化和還原序列化 DataSetSurrogate 物件及其所有欄位。比起使用 DataSet 類別,使用 DataSetSurrogate 類別進行序列化的主要優點是 DataSetSurrogate 類別會使用二進位格式來序列化資料。比起現有的 DataSet XML 序列化格式,使用二進位格式進行序列化在記憶體和 CPU 方面都更有效率。

注意 如果將此序列化包裝函式類別的效能提升至最高,請在遠端處理時使用 .NET Framework System.Runtime.Serialization.Formatters.Binary.BinaryFormatter 類別。使用 .NET Framework System.Runtime.Serialization.Formatters.Soap.SoapFormatter 類別進行遠端處理的效率不如使用 DataSetSurrogate 類別。

您可以從「Microsoft 下載中心」下載下列檔案:
摺疊此圖像展開此圖像
下載
立即下載 SurrogateSample.exe 套件。 如需有關如何下載 Microsoft 支援檔案的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
119591 如何從線上服務取得 Microsoft 支援檔案
Microsoft 已對這個檔案做過病毒掃描。Microsoft 是利用檔案發佈當日的最新病毒偵測軟體來掃描檔案。檔案會儲存在安全的伺服器上,以避免任何未經授權的更改。

存取範例檔案

將 SurrogateSample.exe 檔案儲存至您電腦上的 C 磁碟機。您可從該處解壓縮資料夾結構。每一個資料夾都有包含 Readme 檔案提供更多的指示。

屬性

文章編號: 829740 - 上次校閱: 2006年9月6日 - 版次: 1.3
這篇文章中的資訊適用於:
  • Microsoft .NET Framework 1.0
  • Microsoft .NET Framework 1.1
關鍵字:?
kbinfo kbdownload KB829740
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com