@w0lkolak

Почему setFormat в hightlight при открытии документа занимает в 20 раз больше времени чем при вставке текста?

Дано:
Есть 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)

Из-за чего такое может происходить и что мне может помочь?
  • Вопрос задан
  • 39 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы