我爱Aspx >> VB.Net >> ReDim Preserve 執行效能上的陷阱(转)就其本身來說,這並不是問題,問題在於 Preserve(今日主題)。當使用 Redim 含有 Preserve 關鍵字時,之前的元素被保留 - 就如在新的陣列中複製一樣
原則上,我們已經搞壞了整件事 - ReDim Preserve 陳述句產生一新陣列 - 而之前陣列的元素會複製到新的陣列。這在 VB.NET 環境中會暗自發生 (就如過去的 VB 是一樣情形)。除了執行效能漏失外,並不會察覺。為了能夠突顯這種現象,我設定一個迴圈來 Redim 陣列 5000 次 (redimloop.aspx )。 <% @Page Language="VB" Trace="True" %><%Dim arrStrings() as StringDim i as IntegerTrace.Write("Redim","Start")For i = 1 To 5000 ReDim Preserve arrStrings(i) arrStrings(i-1) = iNextTrace.Write("Redim","End")%>
當我再追蹤時轉換,就很容易得到執行效能上的資料:
當然,隨著每次呼叫(以及使用的機器)每次會有不同表現,但是 至少你已懂得相對的執行效能
但是當呼叫 ReDim Preserve 時會暗地發生什麼事?為了說明這點,在 C# 中我仿效 ReDim 陳述句,就好像在 VB.NET 中使用 ReDim 暗地發生一樣,必須明示出來 (redimloopexplicit.aspx )。 <% @Page Language="C#" Trace="True" %><%string[] arrStrings = new string[1];int i;Trace.Write("Redim","Start");for (i=1;i<=5000;i++){ string[] arrHelper = new string; arrStrings.CopyTo(arrHelper, 0); arrHelper[i-1] = i.ToString(); arrStrings = arrHelper;}Trace.Write("Redim","End");%>
【我对这篇文章有话说?】
Chapter 3 Major VB.NET Changes..[05-20]
Chapter 4 Building Classes and..[05-20]
Chapter 3 Major VB.NET Changes..[05-20]
Chapter 3 Major VB.NET Changes..[05-20]
Chapter 2 Your First VB.NET(2)[05-20]
Chapter 2 Your First VB.NET(1)[05-20]
VB.NET 的新特点:变量,类型,数..[05-20]
VB.NET Samples(送给Blood等VB拥..[05-20]
HOW TO: Compute and Compare Ha..[05-20]
为什么选择VB.NET?(转贴)[05-20]