2013-07-25 53 views
0

我的程序確實有效,但我認爲它會遇到性能問題,它在循環陣列時消耗高達40%的總CPU使用率。通常我的程序只會消耗5%以下的CPU使用量,我認爲ReDim Preserve正在造成這種情況,因爲我正在循環大約10萬條以上的線路。這是我的代碼。VB.net ReDim Preserve的替代方式

Dim sArray As String() 
    Dim fStream As New System.IO.FileStream("messages.txt", IO.FileMode.Open) 
    Dim sReader As New System.IO.StreamReader(fStream) 
    Dim Index As Integer = 0 
    Do While sReader.Peek >= 0 
     ReDim Preserve sArray(Index) 
     sArray(Index) = sReader.ReadLine 
     Index += 1 
    Loop 

    fStream.Close() 
    sReader.Close() 

除了ReDim Preserve之外,還有其他方法可以將數值放入數組嗎? 在此先感謝,我現在真的被困在這個問題上。

這裏是我使用列表更新的代碼。

Dim sArray As String() 
    Dim sList As New List(Of String) 
    Dim fStream As New System.IO.FileStream("messages.txt", IO.FileMode.Open) 
    Dim sReader As New System.IO.StreamReader(fStream) 
    Dim Index As Integer = 0 
    Do While sReader.Peek >= 0 
     sList.Add(sReader.ReadLine) 
    Loop 
    sArray = sList.ToArray 

    fStream.Close() 
    sReader.Close() 

我仍然需要數組的功能,所以我創建了一個數組並將列表的內容放入它。

+0

在其中一個答案中,有人建議您使用列表,我同意。如果由於某種原因,你不能這樣做讓我們知道。 – dbasnett

+0

我在開始使用列表轉換時遇到問題。一個起始代碼可以幫助 –

+0

是否有理由不使用['File.ReadAllLines'](http://msdn.microsoft.com/zh-cn/library/s2tte0y1.aspx)? – Brian

回答

6

您應該使用List(Of String),這將爲將來的元素留出空間,而不是每次調整大小。

3

正如SLaks說最好的應該是一個列表:

Dim sArray As New List(Of String) 
Dim fStream As New System.IO.FileStream("messages.txt", IO.FileMode.Open) 
Dim sReader As New System.IO.StreamReader(fStream) 
Do While sReader.Peek >= 0 
    sArray.add(sReader.ReadLine) 
Loop 

fStream.Close() 
sReader.Close() 
+0

非常感謝這個幫助很多人。我將發佈編輯我的代碼與更新之一。 –

+0

你需要什麼樣的陣列功能? btw。你也應該接受SLaks的回答;) –

+0

現在一切都完成了,我終於完成了。 它確實提高了性能,我的程序現在可以在一秒鐘內讀取100,000多行。非常感謝。 –

1

是好像你正在閱讀一個文件,另一個選項是使用ReadAllLines方法。

Dim sArray() As String = System.IO.File.ReadAllLines("messages.txt")