Дано:
Есть
class MyEdit(QPlainTextEdit)
. Ему в __init__ среди прочего установлено
self.highlight = HL_Syntax.GMHighlighter(self.document())
Есть
class GMHighlighter (QSyntaxHighlighter)
, для которого переопределена
def highlightBlock(self, text):
...
self.setFormat(index, length, format)
И ещё есть документ под подсветку синтаксиса на миллион строк.
Теперь, собственно, неясный момент:
Без
self.highlight = HL_Syntax.GMHighlighter(self.document())
на чисто открытие и размещение в
MyEdit
файла-миллионника уходит
6 секунд, на вставку этого же текста в пустой
MyEdit
уходит
14 секунд. То есть всё сравнительно быстро, но
открытие шустрее чем
Ctrl+V.
Если включить распознание синтаксиса, но не включать визуальную подсветку (без
setFormat
), то к обоим результатам прибавляется
по 35 секунд, что логично.
Однако стоит включить
self.setFormat(index, length, format)
и начинается странность -
Ctrl+V прибавляет ещё
секунд шесть, а
открытие файла мгновенно замедляется в разы и занимает
уже более трёх минут.
То есть, создать новый файл и в него вставить текст становится быстрее чем открыть текстовый файл, хотя открытие само по себе занимало меньше времени чем вставка.
Нашёл, что проблема существует при одновременном использовании self.updateRequest.connect(self.updateLineNumberArea) и seFormat, где
def updateLineNumberArea(self, rect, dy):
if dy:
self.lineNumberArea.scroll(0, dy)
else:
self.lineNumberArea.update(0, rect.y(), self.lineNumberArea.width(), rect.height())
if rect.contains(self.viewport().rect()):
self.updateLineNumberAreaWidth(0)
Из-за чего такое может происходить и что мне может помочь?