Hi,
heute habe ich ein Problem, wo ich gern euren Rat für ein Design Problem einholen möchte.
Ich habe einen kleinen HexEditor geschrieben. Mit dem kann man Files hexadezimal anzeigen, nach Text suchen und ggfs. den Text überschreiben oder ersetzen. (s. Anhang)
Die Anzeige beruht auf einer DataGridView ... der File wird zu Beginn komplett in einen Byte Array eingelesen und dann in die DataGridView eingestellt.
Die Sache funktioniert sehr gut ...
... aber bei großen File (z.B. 1.5 MB dauert die Sache endlos lang (z.B eine halbe Minute).
Das Einlesen in den ByteArray geht Ratz Fatz (unter 1 Sekunde):
Aber die Aufbereitung ist Käse!
Ich vermute mal, dass es nicht sehr effizient ist, die Zeilen mit .Add einzustellen.
Gibt es möglichweise andere Techniken, mit denen man die DataGridView schneller aufbaut.
Für eure wohlmeinenden Ratschläge bin ich wie immer dankbar ...
LG
Peter
heute habe ich ein Problem, wo ich gern euren Rat für ein Design Problem einholen möchte.
Ich habe einen kleinen HexEditor geschrieben. Mit dem kann man Files hexadezimal anzeigen, nach Text suchen und ggfs. den Text überschreiben oder ersetzen. (s. Anhang)
Die Anzeige beruht auf einer DataGridView ... der File wird zu Beginn komplett in einen Byte Array eingelesen und dann in die DataGridView eingestellt.
Die Sache funktioniert sehr gut ...
... aber bei großen File (z.B. 1.5 MB dauert die Sache endlos lang (z.B eine halbe Minute).
Das Einlesen in den ByteArray geht Ratz Fatz (unter 1 Sekunde):
Aber die Aufbereitung ist Käse!
VB.NET-Quellcode
- Dim HexData(15) As String
- Dim ChrData(15) As String
- Dim i As Integer = -1 'Row index
- Dim j As Integer = -1 'Column index
- Dim myAddr As Integer = 0
- For n As Integer = 0 To FileByteArray.Count - 1 'Process all bytes
- Dim myByte As Byte = FileByteArray(n)
- If j = -1 Then 'Start new row
- i += 1 'Increment row pointer
- For k = 0 To 15 'Initialize data
- HexData(k) = ""
- ChrData(k) = ""
- Next
- End If
- j += 1 'Point to next column
- 'Convert Byte to Hex ---------------------------------------------------------------------------------------
- HexData(j) = myByte.ToString("x2").ToUpper 'Fill hex column
- 'Convert Byte to Char --------------------------------------------------------------------------------------
- Dim myChar As String = Convert.ToChar(myByte) 'Convert Byte to character
- If myByte <= 31 Then myChar = "." '0x00 - 0x1F not displayable
- If 128 <= myByte AndAlso myByte <= 160 Then myChar = "." '0x80 - 0xA0 not displayable
- ChrData(j) = myChar 'Fill char column
- If j = 15 OrElse n = FileByteArray.Count - 1 Then 'Line complete
- dgvHexDump.Rows.Add(i.ToString.PadLeft(6, "0"c) & ":", 'Offset and hex address
- "0X" & myAddr.ToString("x2").ToUpper.PadLeft(6, "0"c) & ":",
- HexData(0), HexData(1), HexData(2), HexData(3), HexData(4), HexData(5), HexData(6), HexData(7),
- "",
- HexData(8), HexData(9), HexData(10), HexData(11), HexData(12), HexData(13), HexData(14), HexData(15),
- "",
- ChrData(0), ChrData(1), ChrData(2), ChrData(3), ChrData(4), ChrData(5), ChrData(6), ChrData(7),
- ChrData(8), ChrData(9), ChrData(10), ChrData(11), ChrData(12), ChrData(13), ChrData(14), ChrData(15))
- j = -1 'Reset column pointer
- myAddr += 16 'Increment address
- End If
- Next
Ich vermute mal, dass es nicht sehr effizient ist, die Zeilen mit .Add einzustellen.
Gibt es möglichweise andere Techniken, mit denen man die DataGridView schneller aufbaut.
Für eure wohlmeinenden Ratschläge bin ich wie immer dankbar ...
LG
Peter
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Peter329“ ()