• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:[VB.NET] 処理の高速化を行いたい。)

[VB.NET] ファイルのバイト処理を高速化する方法

このQ&Aのポイント
  • VB.NETを使用してファイルのバイト処理を行っていますが、大きいファイルでは処理時間がかかってしまいます。処理を高速化する方法はありますか?
  • VB.NETでファイルのバイト処理を行っていますが、大きいファイルを扱うと処理時間が長くなってしまいます。処理の高速化方法を教えてください。
  • VB.NETでファイルのバイト処理を行っていますが、大きいファイルを扱うと処理時間が増えます。処理を高速化する方法があれば教えてください。

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

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

> ' 16進数を10進数へ変換 > n = ("&h" & String.Format("{0:X2}", br.ReadByte)) コメントとやっていることが合っていません。 Byte型を &h75 の様な文字列に変換し、 その後暗黙の型変換でInteger型に変換するという (無駄な)処理がここでは行われています。 Byte型は数値なのでそのまま演算処理すれば良いです。 素直にこんな感じに書いてみては? =================================== ' インデントに全角空白を使っています。要削除。 Imports System Imports System.IO Class BRotate  Shared Sub main(ByVal args As String())   Dim srcName As String = args(0) ' コピー元のファイル名   Dim destName As String = args(1) ' コピー先のファイル名   Dim BUFSIZE As Integer = 2048 ' 1度に処理するサイズ   Dim buf(BUFSIZE) As Byte ' 読み込み用バッファ   Dim m As Integer = 3 ' 3ビット左回転   Dim readSize As Integer ' Readメソッドで読み込んだバイト数   Using src As New FileStream( _     srcName, FileMode.Open, FileAccess.Read)    Using dest As New FileStream( _      destName, FileMode.Create, FileAccess.Write)     While True      readSize = src.Read(buf, 0, BUFSIZE) ' 読み込み      If readSize = 0 Then       Exit While ' 完了      End If      For i As Integer = 0 To readSize - 1        buf(i) = (buf(i) << m) Or (buf(i) >> (8-m)) ' ビット回転      Next      dest.Write(buf, 0, readSize) ' 書き込み     End While    End Using   End Using  End Sub End Class ' 参考にしたページ:以下のページのファイルコピープログラムをベースにした ' バイナリ・ファイルを読み書きするには?[C#、VB] - @IT ' http://www.atmarkit.co.jp/fdotnet/dotnettips/669bincopy/bincopy.html

wansui
質問者

お礼

ありがとうございました! 信じられないくらい高速化する事が出来ました! (一瞬で処理が終わる!) まじありがとおおおおおおおおおおw

その他の回答 (1)

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.2

C#しか書けないけど、こんな感じ //変換表を作成 byte[] convList = new byte[256]; for (byte i = 0; i <= 255; i++) { convList[i] = (byte)((i << 3) & 255 | (i >> 5)); } using (FileStream reader = new FileStream(~)) using (FileStream writer = new FileStream(~)) { while (true) { int c = reader.ReadByte(); if (c == -1) break; writer.WriteByte(convList[c]); } }

wansui
質問者

お礼

ありがとうございました。

関連するQ&A