- ベストアンサー
[VB.NET] ファイルのバイト処理を高速化する方法
- VB.NETを使用してファイルのバイト処理を行っていますが、大きいファイルでは処理時間がかかってしまいます。処理を高速化する方法はありますか?
- VB.NETでファイルのバイト処理を行っていますが、大きいファイルを扱うと処理時間が長くなってしまいます。処理の高速化方法を教えてください。
- VB.NETでファイルのバイト処理を行っていますが、大きいファイルを扱うと処理時間が増えます。処理を高速化する方法があれば教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> ' 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
その他の回答 (1)
- todo36
- ベストアンサー率58% (728/1234)
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]); } }
お礼
ありがとうございました。
お礼
ありがとうございました! 信じられないくらい高速化する事が出来ました! (一瞬で処理が終わる!) まじありがとおおおおおおおおおおw