- ベストアンサー
バイナリの高速読み取り
vb2005でバイナリデータを16進数で読み込みたいのですが、 Dim br As New System.IO.FileStream("フルパス",IO.FileMode.Open, IO.FileAccess.Read) Dim strbyte As String For I As Integer = 0 To CType(br.Length, Integer) - 1 strbyte = Hex(br.ReadByte).ToString If strbyte.Length = 1 Then strbyte = "0" & strbyte End If TextBox1.Text = TextBox1.Text & " " & strbyte Application.DoEvents() Next とか、他に Dim arByte() As Byte = My.Computer.FileSystem.ReadAllBytes("フルパス") Dim obyte As Byte Dim strbyte As String For Each obyte In arByte strbyte = Hex(obyte).ToString If strbyte.Length = 1 Then strbyte = "0" & strbyte End If TextBox1.Text = TextBox1.Text & " " & strbyte Application.DoEvents() Next なんかも試してみたのですが、ぜんぜん読み込みが遅くて困っています。 なんか高速にバイナリデータを16進数で読み込む方法がありましたら教えてください。(一般のバイナリエディタ並に)
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Application.DoEventsをループのたびに呼び出しているのを間引いてみてはいかがでしょう たとえば10回に1回とか 1000回に1回とかに 最初の例なら dim blder as new System.Text.StringBuilder For I As Integer = 0 To CType(br.Length, Integer) - 1 'strbyte = Hex(br.ReadByte).ToString 'If strbyte.Length = 1 Then ' strbyte = "0" & strbyte 'End If 'TextBox1.Text = TextBox1.Text & " " & strbyte builder.Append( String.Format("{0:X2}", br.ReadByte ) ) if I mod 10 = 0 then Application.DoEvents() end if Next TextBox1.Text = builder.ToString といった具合で ・・・ #1の回答のように 文字列の連結にはStringBuilderを使って最終的に ToStringで文字列を取得したほうがいい場合があります
その他の回答 (1)
- Gotthold
- ベストアンサー率47% (396/832)
読み込みが遅いんじゃなくて、文字列連結が遅いんじゃないの? StringBuilderとか使うといいよ。 文字列処理を高速に行う: .NET Tips: C#, VB.NET, Visual Studio http://dobon.net/vb/dotnet/string/stringbuilder.html
お礼
返信ありがとうございます。 ものすごい高速に読み取ることができました。 ありがとうございました。