Сделал такой монитор логов:
Принцип работы - указываем лог (для примера можно взять лог любого ИМ), и в $ListR выводятся последние 10 строк + мониторятся новые строки, добавляющиеся в лог...
Вопрос: с маленькими логами работает нормально, с большими ~ 1,5 Mb, де > 20000 строк - $ListR очень медленно наполняется, и чем больше строк добавляется в лист - тем медленнее это происходит ... - Не поспевает за наполнением лога...
Как можно оптимизировать код для работы с большими логами?
Код:
#include <Constants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <WindowsConstants.au3>
#Include <File.au3>
;путь к любому текстовому логу
Local Const $sReceive = "C:\receive.log"
$Receive = FileOpen($sReceive, 0)
$hLinesR = _FileCountLines($sReceive)
$Form1 = GUICreate("Монитор логов", 640, 480, 100, 50, BitOR($WS_MAXIMIZEBOX,$WS_MINIMIZEBOX,$WS_SIZEBOX,$WS_THICKFRAME,$WS_SYSMENU,$WS_CAPTION,$WS_OVERLAPPEDWINDOW,$WS_TILEDWINDOW,$WS_POPUP,$WS_POPUPWINDOW,$WS_GROUP,$WS_TABSTOP,$WS_BORDER,$WS_CLIPSIBLINGS))
$ListR = GUICtrlCreateList("", 5, 30, 630, 450, BitXOR($LBS_NOSEL, $WS_VSCROLL,$WS_HSCROLL))
GUICtrlSetLimit(-1, 1300)
GUISetState(@SW_SHOW)
;доб существующих последних 10-ти строк лога в лист
$r = $hLinesR-10
While $r < $hLinesR
$r = $r+1
GUICtrlSetData ( $ListR, $r & '. '& FileReadLine ($Receive, $r) )
WEnd
_GUICtrlListBox_SetCaretIndex($ListR, $r)
AdlibRegister ( '_AddLine', 1000)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func _AddLine()
;добавление новых строк в лист
While $hLinesR < _FileCountLines($sReceive)
$hLinesR = $hLinesR + 1
GUICtrlSetData ( $ListR, $hLinesR & '.-'& FileReadLine ( $Receive, $hLinesR) )
_GUICtrlListBox_SetCaretIndex($ListR, $hLinesR)
WEnd
EndFunc
Принцип работы - указываем лог (для примера можно взять лог любого ИМ), и в $ListR выводятся последние 10 строк + мониторятся новые строки, добавляющиеся в лог...
Вопрос: с маленькими логами работает нормально, с большими ~ 1,5 Mb, де > 20000 строк - $ListR очень медленно наполняется, и чем больше строк добавляется в лист - тем медленнее это происходит ... - Не поспевает за наполнением лога...
Как можно оптимизировать код для работы с большими логами?