• ベストアンサー

バイナリの高速読み取り

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進数で読み込む方法がありましたら教えてください。(一般のバイナリエディタ並に)

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.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で文字列を取得したほうがいい場合があります

qwerjpo
質問者

お礼

返信ありがとうございます。 ものすごい高速に読み取ることができました。 ありがとうございました。

その他の回答 (1)

  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.1

読み込みが遅いんじゃなくて、文字列連結が遅いんじゃないの? StringBuilderとか使うといいよ。 文字列処理を高速に行う: .NET Tips: C#, VB.NET, Visual Studio http://dobon.net/vb/dotnet/string/stringbuilder.html

関連するQ&A

専門家に質問してみよう