2017-04-18 34 views
1

我想找出一种方法来加载一个非常大的.txt文件,并认为如果我把它分成几部分(Listboxes),它会加载得更快,并且更容易操作,延迟更少。或者有没有办法与后台工作的OFD? 这里是我正在加载的.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) 

我可以去和标记中的.txt的每1/4用分隔符,如果这将有助于? 我在想如果我迭代XX行数量然后下一个列表框等。也许某种形式的items.count在一个如果不是声明?我的想法正在圈起来,请将我的目标瞄准最佳方向。我的文件是25.MB,增长缓慢。记事本++是处理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

我选择这个作为正确的答案,看看这是如何正确的做法 –