以下は私が使用しているものです。それは機能しますが、10,000行以上などのかなり大きなファイルをカウントしようとすると、プログラムがロックされます。小さいファイルはすぐに実行されます。
テキストファイルの行数を数えるためのより良い方法はありますか、それとももっと速い方法を言うべきですか?
現在使用しているものは次のとおりです。
Dim selectedItems = (From i In ListBox1.SelectedItems).ToArray()
For Each selectedItem In selectedItems
ListBox2.Items.Add(selectedItem)
ListBox1.Items.Remove(selectedItem)
Dim FileQty = selectedItem.ToString
'reads the data file and returns the qty
Dim intLines As Integer = 0
'Dim sr As New IO.StreamReader(OpenFileDialog1.FileName)
Dim sr As New IO.StreamReader(TextBox1_Path.Text + "\" + FileQty)
Do While sr.Peek() >= 0
TextBox1.Text += sr.ReadLine() & ControlChars.CrLf
intLines += 1
Loop
ListBox6.Items.Add(intLines)
Next
Imports System.IO.File 'At the beginning of the file
Dim lineCount = File.ReadAllLines("file.txt").Length
this の質問を参照してください。
反復を可能な限り効率的にしたとしても、十分な大きさのファイルを渡すと、作業の実行中にアプリケーションがフリーズすることになります。
ロックを回避したい場合は、新しいスレッドを生成して非同期で作業を実行できます。 .NET 4.0を使用している場合は、 Task クラスを使用してこれを非常に簡単にすることができます。
TextBox2.Text = File.ReadAllLines(scannerfilePath).Length.ToString()