html5中文学习网

您的位置: 首页 > 网络编程 > ASP.NET » 正文

ReDim Preserve 行效能上的陷阱(转)_.NET教程_编程技术

[ ] 已经帮助:人解决问题
ReDim Preserve 行效能上的陷阱在 VB 任何使用列的人一定非常熟悉使用 ReDim 述改列大小,今天, 我明什最好不要使用的述法,或是至少要很小心考使用到它。

ReDim 可能上的使用


在始 ReDim 述句之前, 我要藉由程式例 (redimsamples.aspx) 明 ReDim 最普遍的使用方法。使用到 ReDim 以及 ReDim Preserve:
<% @Page Language="VB" %><%Dim arrStrings(1) as StringResponse.Write(UBound(arrStrings) & "<br>")ReDim arrStrings(20)Response.Write(UBound(arrStrings) & "<br>")ReDim Preserve arrStrings(25)Response.Write(UBound(arrStrings) & "<br>")%>

ReDim 允加大以及小列大小。因此,一新的列在每一 instance 中生,理由是 VB.NET 列是承自 .NET Runtime 的 System.Array,而在生,根定有一固定大小。在 C# 中是很明的,就如下的程式所示是仿效 ReDim
string[] arrTest = new string[1];// and now we want to change the size: ReDim arrTest(20)arrTest = new string[20];

就其本身,不是,在於 Preserve(今日主)。使用 Redim 含有 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");%>

我能明看出 - 首先一新的列大小生,然後先前的列容到新的列。 我指派重述的在 C# 中型 String,求完整,我交了列。
要是你 VB.NET 好像有不同,那就了 - 行效能上完全和 ReDim Preserve 一(我的程式或好一,因不需要小列列入考量)。行效能的好只能藉由更好的技作比才能 - ArrayList class。

最佳解方法 - ArrayLists


列的最佳解方法是在System.Collections namespace 中使用 ArrayList class。 ArrayList 可以的增或小,且容易使用 (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,法得行效能。但是使用 50000 就表的非常明:

行是 0.02 到 0.6 - 而且是一有序的大圈。我是要 ReDim Preserve 也能著重述次行,但是在行的中我重新定 Server 的。


篇文章的我了解到在 VB.NET 境中 ReDim Preserve 最好避免使用。需要使用的列,建使用 [I]ArrayList
因看起比像是正式的列。 
ZRjHTML5中文学习网 - HTML5先行者学习网
ZRjHTML5中文学习网 - HTML5先行者学习网
(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助