Top.Mail.Ru
Ответы

Как WinHex так быстро открывает бинарники??

Чёт решил сделать HEX-редактор для себя, со своими наворотами. На грядущее.
Короче он у меня капец тяжело поднимает файлы. Как сделать, чтобы он за секунду файлы открывал, ну или хотя бы за пять.
Код VB.Net:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
If My.Application.CommandLineArgs.Count > 0 Then
Dim F = My.Application.CommandLineArgs.Item(0)
Dim HexCode As String = ""
Dim iByte As String = ""
Dim SPorENT As String = ""
Dim n As Byte = 0
For Each I In IO.File.ReadAllBytes(F)
iByte = Hex(I)
If Len(iByte) = 1 Then iByte = "0" & iByte
Select Case n
Case 4
SPorENT = " "
Case 8
SPorENT = " "
Case 12
SPorENT = " "
Case 16
SPorENT = Chr(10)
n = 0
Case Else
SPorENT = " "
End Select
If HexCode = "" Then
HexCode = iByte
Else
HexCode = HexCode & SPorENT & iByte
End If
n = n + 1
Next
RichTextBox1.Text = HexCode
End If
End Sub

По дате
По рейтингу
Аватар пользователя
Новичок
6лет

Самое простое - читать не целиком, а по страницам некоторой длины. То есть показывать только часть, захотел еще часть - снова считало и т. д.
Для поиска по файлу дергать внешнюю утилиту, которая быстро ищет, например findstr.
Помнится, я в свое время многое так писал - оборачивал внешнюю утилиту в красивую "упаковку".

Все это не серьезно, но что-то большее ты вряд ли сейчас осилишь.

Аватар пользователя
Искусственный Интеллект
6лет

А с какого ж перепуга ты делаешь IO.File.ReadAllBytes(F)?
Читай только ту часть, которую показываешь на экране.

Аватар пользователя
Искусственный Интеллект
6лет

Он читает содержимое файла буферизованно, и обрабатывает/выводит только часть. Как и любой другой правильно написанный HEX-редактор/вьюер.
У тебя же, все содержимое файла целиком считывается, обрабатывается, и выводится. Плюс, тормозной интерпретатор VB вместо нативного кода (хотя хз на чем WinHex написан, может он тоже на фреймворке).

Аватар пользователя
Мудрец
6лет

Заюзай File Mapping Object. Система сама всё сделает. Торренты так работают и сервера. И всё ОК будет.