2017-04-18 10 views
1

非常に大きな.txtファイルをロードする方法を見つけようとしていて、セクション(リストボックス)に分割すると、読み込み速度が速くなり、遅れが少なく簡単に操作できます。または、バックグラウンドワーカーとOFDへの道はありますか?ここ は、私は私が行くとそれが役立つならば区切り文字で.txtファイルのすべての1/4をマークすることができ.txtの複数のリストボックスに.txtをロード/分割する。

 TextBox1.Text = "" 
    OpenFileDialog1.Title = "Load File" 
    OpenFileDialog1.InitialDirectory = "C:temp" 
    OpenFileDialog1.ShowDialog() 
    Dim path As String = OpenFileDialog1.FileName 
    TextBox1.Text = path 
    Dim lines() As String = IO.File.ReadAllLines(TextBox1.Text) 

をロードしていますどのようにでしょうか? 私はXXの行の次のリストボックスなどの多分何らかの形のitems.countをif not文で繰り返すと思っていましたか?私の心はサークルに入っていて、私を最善の方向に向けてください。私のファイルは25.MBで、ゆっくりと成長しています。 Notepad ++はATMをうまく処理する唯一のものです。

 ListBox1.Items.Add(lines(1 - 10000)) 

エラー( "外配列のインデックスまたは類似の")スロー

 ListBox1.Items.Add(lines(10000)) 

は、おそらくこの線に沿って何かを単一のライン

+0

UIスレッドで読み込んでいます。したがって、ロードするデータが多くなればなるほど、時間がかかることになります。ファイルをDataTableにロードしてから、データテーブルへのファイルのロードが完了したら、リストボックスにデータテーブルをバインドする必要があります。 –

答えて

0

をロードします。これは100%正確なコードではありません。しかし、あなたに考えを与える。

Dim dt As New DataTable() 
Dim lines As New List(Of [String])() 
lines = New List(Of [String])(File.ReadLines(ofDialog.FileName)) 
Task.Run(Function() 
Dim options As New ParallelOptions() 
options.MaxDegreeOfParallelism = CInt(1)//Number of threads to spawn 

Parallel.ForEach(lines, options, Function(line) 
    dt.Rows.Add() 
End Function) 
Me.Invoke(DirectCast(Sub() listview.DataSource = dt, MethodInvoker)) 

End Function) 
+0

例をありがとう、私はこれを今すぐ実行します。 –

+0

別の方法があるかもしれませんが、それでもあなたの専門知識を使用することができます。 –

+0

私は正しい答えとしてこれを選んだのですが、これが正しい方法であるかを見てください –

関連する問題