ReDimPreserve绦行能上的陷阱(转)


所属类别:.NET

文章作者:佚名

特别推荐:免费发布信息 承包关键词~~抢爆了!HOT!


ReDim Preserve 绦行能上的陷阱在 VB 任何使用^列的人一定非常熟悉使用 ReDim 述砀淖列大小,今天, 我⒃f明槭颤N碜詈貌灰使用@拥年述Z法,或是至少要很小心考]使用到它。 ReDim 可能上的使用在]_始 ReDim 述句之前, 我要藉由程式例 (redimsamples.aspx) 碚f明 ReDim 最普遍的使用方法。使用到 ReDim 以及 ReDim Preserve: <% @Page Language="VB" %><%Dim arrStrings(1) as StringResponse.Write(UBound(arrStrings) & "")ReDim arrStrings(20)Response.Write(UBound(arrStrings) & "")ReDim Preserve arrStrings(25)Response.Write(UBound(arrStrings) & "")%>ReDim 允S加大以及s小列大小。因此,一新的列在每一 instance 中a生,理由是 VB.NET 列是^承自 .NET Runtime 的 System.Array,而在a生r,根定x有一固定大小。在 C# 中@是很明@的,就如下的程式a所示是仿效 ReDim:string[] arrTest = new string[1];// and now we want to change the size: ReDim arrTest(20)arrTest = new string[20];就其本身碚f,@K不是},}在於 Preserve(今日主})。使用 Redim 含有 Preserve PI字r,之前的元素被保留 - 就如在新的列中}u一ReDim Preserve 绦行能上的⑹原t上,我已搞牧苏件事 - ReDim Preserve 述句a生一新列 - 而之前列的元素}u到新的列。@在 VB.NET h境中暗自l生 (就如^去的 VB 是一忧樾危。除了绦行能漏失外,K不察X。榱四蛲伙@@NF象,我O定一圈 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")%>我再追rDQ,就很容易得到绦行能上的Y料:然,S著每次呼叫(以及使用的C器)每次有不同表F,但是 至少你已懂得相Φ绦行能但是呼叫 ReDim Preserve r暗地l生什N事?榱苏f明@c,在 C# 中我仿效 ReDim 述句,就好像在 VB.NET 中使用 ReDim 暗地l生一樱必明示出 (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");%>倪@我能明@看出 - 首先一新的列大小a生,然後先前的列热}u到新的列。 我指派重述的翟 C# 中D型 String,榍笸暾,我交Q了列怠要是你J VB.NET 好像有c不同,那就e`了 - 绦行能上完全和 ReDim Preserve 一樱ㄎ业某淌酱a或S好一c,因K不需要p小列列入考量)。绦行能的好闹荒芙逵膳c更好的技g作比^才能w - ArrayList class。最佳解Q方法 - ArrayListsB列的最佳解Q方法是在System.Collections namespace 中使用 ArrayList class。 ArrayList 可以B的增L或s小,且容易使用 (arraylistloop.aspx):<% @Page Language="VB" Trace="True" %><% @Import Namespace="System.Collections" %><%Dim arrList as New ArrayList(100)Dim i as LongTrace.Write("ArrayList","Start")For i = 1 To 50000

arrList.Add(i)NextTrace.Write("ArrayList","End")%>如果你有注意^察的你注意到圈不是跑到 5000 而是 50000,理由是: 使用到 5000,Ko法y得绦行能。但是使用 50000 就表F的非常明@:绦rg是 0.02 到 0.6 - 而且是一有序的大圈。我是要 ReDim Preserve 也能S著重述次绦校但是在绦械漠中我重新O定 Server 的rg。Y倪@篇文章的n}我了解到在 VB.NET h境中 ReDim Preserve 最好避免使用。需要使用B的列r,建h使用 [I]ArrayList 因檫@看起肀容^像是正式关闭本页

相关信息

· 续贴图发解决开关显示文章的程序源代码

·  Mocha BSM产品亮点――配置变更管理

· WebLogic初步研究

· SQL Server数据库中交易日志的维护








....

75366 96863