[QScintilla] Incremental way of loading a a big file in QScintilla (Very very important)

Roshni Lalwani roshiba81 at gmail.com
Sat Jun 11 11:31:34 BST 2016


If we load the fiile a file in in object of QScintilla  using folllowing
code


Header myEditor.h

class myScintilla: public QScintilla {
     public readFile();};
#include  "myEditor.h"void myEditor::readFile() {

   if (FILE* fp = fopen(ofilename.toLatin1(), "r")) {
    QTextStream ts(fp, QIODevice::ReadOnly);
    int bufferSize =(1024* 1024)/2;
    do {
      QString s = ts.read(bufferSize);
      append(s);
    } while(!ts.atEnd());}



there will be still performance issue while reading large files. It took
around

1) 25 seconds to read a file of size 1.5 GB. (Machine cores 4 , 16 GB RAM)
2 10 seconds of file of size 512MB (on same machine)

Is there any way we can load the file in QScintilla object incrementally
based on movement of scrollbar?

There is  ILoader in Scintilla::ScintillaEdit that has the capabilty . How
Can we have same capability in object of QScintilla  and how Can we use
ILoader  in object of QScintilla


The Scintilla documentation can be found at:

Here’s the basic mechanism to load the source into Scintilla using ILoader.
dEditorPtr is an instance of Scintilla::ScintillaEdit. lFileSize is the
size of the source file in bytes.



char lBuffer[8192];

size_t lCnt;

ILoader *lLoader = (ILoader*) dEditorPtr->createLoader(lFileSize);

FILE* lFP = fopen(ofilename.toLatin1(), “r”);

while (!feof(lFP)) {

   lCnt = fread(lBuffer, 1, sizeof(lBuffer), lFP);

   if (lLoader->AddData(lBuffer, lCnt) != SC_STATUS_OK) {

      // report error

   }

}

dEditorPtr->setDocPointer(lLoader->ConvertToDocument());
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.riverbankcomputing.com/pipermail/qscintilla/attachments/20160611/18304e4e/attachment-0001.html>


More information about the QScintilla mailing list