Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Slow performance and large memory usage with QTableView in Qt 5.15
QtWS25 Last Chance

Slow performance and large memory usage with QTableView in Qt 5.15

Scheduled Pinned Locked Moved Solved General and Desktop
qtableviewperformance
24 Posts 5 Posters 5.7k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • K Offline
    K Offline
    KaoN
    wrote on last edited by KaoN
    #1
    #ifndef TESTMODEL_H
    #define TESTMODEL_H
    #include <QAbstractTableModel>
    
    class TestModel : public QAbstractTableModel
    {
        Q_OBJECT
    public:
        explicit TestModel(QObject *parent = nullptr);
    
        virtual int rowCount(const QModelIndex & parent) const;
        virtual int columnCount(const QModelIndex &parent) const;
    
        virtual QVariant data(const QModelIndex &index, int role) const;
        virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const;
    
        bool addData(int i);
    
    private:
        QVector<int> m_list;
    };
    
    #endif // TESTMODEL_H
    
    
    #include "testmodel.h"
    
    TestModel::TestModel(QObject *parent)
    {
    
    }
    
    int TestModel::rowCount(const QModelIndex &parent) const
    {
        return m_list.size();
    }
    
    int TestModel::columnCount(const QModelIndex &parent) const
    {
        return 100;
    }
    
    QVariant TestModel::data(const QModelIndex &index, int role) const
    {
        return QVariant();
    }
    
    QVariant TestModel::headerData(int section, Qt::Orientation orientation, int role) const
    {
        if (orientation == Qt::Vertical) return QString::number(section);
        if (role != Qt::DisplayRole) return QVariant();
        return QString::number(section);
    }
    
    bool TestModel::addData(int i)
    {
        m_list.push_back(i);
        return true;
    }
    
    
    #include <QApplication>
    
    #include "testmodel.h"
    #include <QTableView>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
    
        TestModel model;
        for(int i = 0; i < 100000; ++i)
        {
            model.addData(i);
        }
        QTableView view;
        view.setModel(&model);
        view.show();
        return a.exec();
    }
    
    

    Minimum code is provided above, I'm using QTableView and a very simple model;
    It need like 20+ secs to loaded and use over 6000MB memory, and the selection of the rows is slow too.
    I was wondering if I'm using wrong with model-view, or what can I do to improve the performace, thx

    JonBJ 1 Reply Last reply
    0
    • K KaoN
      #ifndef TESTMODEL_H
      #define TESTMODEL_H
      #include <QAbstractTableModel>
      
      class TestModel : public QAbstractTableModel
      {
          Q_OBJECT
      public:
          explicit TestModel(QObject *parent = nullptr);
      
          virtual int rowCount(const QModelIndex & parent) const;
          virtual int columnCount(const QModelIndex &parent) const;
      
          virtual QVariant data(const QModelIndex &index, int role) const;
          virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const;
      
          bool addData(int i);
      
      private:
          QVector<int> m_list;
      };
      
      #endif // TESTMODEL_H
      
      
      #include "testmodel.h"
      
      TestModel::TestModel(QObject *parent)
      {
      
      }
      
      int TestModel::rowCount(const QModelIndex &parent) const
      {
          return m_list.size();
      }
      
      int TestModel::columnCount(const QModelIndex &parent) const
      {
          return 100;
      }
      
      QVariant TestModel::data(const QModelIndex &index, int role) const
      {
          return QVariant();
      }
      
      QVariant TestModel::headerData(int section, Qt::Orientation orientation, int role) const
      {
          if (orientation == Qt::Vertical) return QString::number(section);
          if (role != Qt::DisplayRole) return QVariant();
          return QString::number(section);
      }
      
      bool TestModel::addData(int i)
      {
          m_list.push_back(i);
          return true;
      }
      
      
      #include <QApplication>
      
      #include "testmodel.h"
      #include <QTableView>
      
      int main(int argc, char *argv[])
      {
          QApplication a(argc, argv);
      
          TestModel model;
          for(int i = 0; i < 100000; ++i)
          {
              model.addData(i);
          }
          QTableView view;
          view.setModel(&model);
          view.show();
          return a.exec();
      }
      
      

      Minimum code is provided above, I'm using QTableView and a very simple model;
      It need like 20+ secs to loaded and use over 6000MB memory, and the selection of the rows is slow too.
      I was wondering if I'm using wrong with model-view, or what can I do to improve the performace, thx

      JonBJ Offline
      JonBJ Offline
      JonB
      wrote on last edited by JonB
      #2

      @KaoN
      Glancing, I think your code is OK for a test.

      You are creating 100,000 rows in your model. That in itself is OK (check the timing on just that). You are then asking QTableView to display all 100,000 rows, and at 100 columns per row. That's 10 million cells. That is not reasonable (IMO)! In a real-world scenario we would expect the model to contain less rows/columns, or we would expect you to use a QSortFilterProxyModel to filter how much is shown to the user.

      Or, if you really insist on displaying that much data, people would implement a "paging" mechanism on the QTableView so that it only shows, say, 100 rows at a time, and the user has to move forward/backward by 100 row-pages. So that the view only actually displays 100 rows at a time. You will have seen that in lots of applications.

      K 1 Reply Last reply
      1
      • JonBJ JonB

        @KaoN
        Glancing, I think your code is OK for a test.

        You are creating 100,000 rows in your model. That in itself is OK (check the timing on just that). You are then asking QTableView to display all 100,000 rows, and at 100 columns per row. That's 10 million cells. That is not reasonable (IMO)! In a real-world scenario we would expect the model to contain less rows/columns, or we would expect you to use a QSortFilterProxyModel to filter how much is shown to the user.

        Or, if you really insist on displaying that much data, people would implement a "paging" mechanism on the QTableView so that it only shows, say, 100 rows at a time, and the user has to move forward/backward by 100 row-pages. So that the view only actually displays 100 rows at a time. You will have seen that in lots of applications.

        K Offline
        K Offline
        KaoN
        wrote on last edited by
        #3

        @JonB Thank you for your suggest, but after several tries, I thought I might find a bug with Qt 5.15 at least.
        Same code works fine with 5.9.9, fast and smooth, but fail to perform the same when I using the latest release, with memory usage nor CPU consumption.

        Should I open a bug for that ?

        1 Reply Last reply
        1
        • Christian EhrlicherC Offline
          Christian EhrlicherC Offline
          Christian Ehrlicher
          Lifetime Qt Champion
          wrote on last edited by
          #4

          Your testapp opens instantly here on linux with 5.15.0 / 64 bit

          Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
          Visit the Qt Academy at https://academy.qt.io/catalog

          K 1 Reply Last reply
          0
          • Christian EhrlicherC Christian Ehrlicher

            Your testapp opens instantly here on linux with 5.15.0 / 64 bit

            K Offline
            K Offline
            KaoN
            wrote on last edited by KaoN
            #5

            @Christian-Ehrlicher thx for testing it for me
            , then it might be a bug related to windows only?

            1 Reply Last reply
            0
            • Christian EhrlicherC Offline
              Christian EhrlicherC Offline
              Christian Ehrlicher
              Lifetime Qt Champion
              wrote on last edited by
              #6

              I also don't have problems with your example with Qt5.15.0 / MinGW64 on Windows 7. Please make sure that you have a clean build dir, maybe even create a new clean project to test it.

              Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
              Visit the Qt Academy at https://academy.qt.io/catalog

              K 1 Reply Last reply
              0
              • Christian EhrlicherC Christian Ehrlicher

                I also don't have problems with your example with Qt5.15.0 / MinGW64 on Windows 7. Please make sure that you have a clean build dir, maybe even create a new clean project to test it.

                K Offline
                K Offline
                KaoN
                wrote on last edited by
                #7

                @Christian-Ehrlicher hmm..that's wierd, I did a clean project and using both MSVC and MinGW64 , same bad performance on Windows 10 1909, fine with 5.9.9

                1 Reply Last reply
                0
                • K Offline
                  K Offline
                  KaoN
                  wrote on last edited by
                  #8

                  After rebooting my pc.. everything works fine....
                  still cant get why...

                  Christian EhrlicherC 1 Reply Last reply
                  0
                  • K KaoN

                    After rebooting my pc.. everything works fine....
                    still cant get why...

                    Christian EhrlicherC Offline
                    Christian EhrlicherC Offline
                    Christian Ehrlicher
                    Lifetime Qt Champion
                    wrote on last edited by
                    #9

                    @KaoN Then please mark this topic as solved

                    Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                    Visit the Qt Academy at https://academy.qt.io/catalog

                    K 1 Reply Last reply
                    0
                    • Christian EhrlicherC Christian Ehrlicher

                      @KaoN Then please mark this topic as solved

                      K Offline
                      K Offline
                      KaoN
                      wrote on last edited by
                      #10

                      @Christian-Ehrlicher done, but can't figure out what made that 'bug' happen

                      JonBJ 1 Reply Last reply
                      0
                      • K KaoN

                        @Christian-Ehrlicher done, but can't figure out what made that 'bug' happen

                        JonBJ Offline
                        JonBJ Offline
                        JonB
                        wrote on last edited by
                        #11

                        @KaoN Windows

                        1 Reply Last reply
                        0
                        • K Offline
                          K Offline
                          KaoN
                          wrote on last edited by
                          #12

                          After hibernating my desktop for a night, it slows again.. and...reboot does not work anymore..TT

                          1 Reply Last reply
                          0
                          • K Offline
                            K Offline
                            KaoN
                            wrote on last edited by
                            #13

                            I deploy two version of the testapp to another laptop, win10 20H2, 5.9 perform good and 5.15 with no luck

                            JKSHJ 1 Reply Last reply
                            0
                            • K KaoN

                              I deploy two version of the testapp to another laptop, win10 20H2, 5.9 perform good and 5.15 with no luck

                              JKSHJ Offline
                              JKSHJ Offline
                              JKSH
                              Moderators
                              wrote on last edited by
                              #14

                              @KaoN said in Slow performance and large memory usage with QTableView in Qt 5.15:

                              After hibernating my desktop for a night, it slows again.. and...reboot does not work anymore..TT

                              Are you running out of RAM? I'm guessing that the slowdown happens when your PC is busy transferring data between your physical RAM and your Pagefile. That is a very slow process.

                              Run Resource Monitor (https://www.thewindowsclub.com/use-resource-monitor-windows-10 ) and see what is using up all your memory and your disk I/O.

                              Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

                              K 1 Reply Last reply
                              1
                              • JKSHJ JKSH

                                @KaoN said in Slow performance and large memory usage with QTableView in Qt 5.15:

                                After hibernating my desktop for a night, it slows again.. and...reboot does not work anymore..TT

                                Are you running out of RAM? I'm guessing that the slowdown happens when your PC is busy transferring data between your physical RAM and your Pagefile. That is a very slow process.

                                Run Resource Monitor (https://www.thewindowsclub.com/use-resource-monitor-windows-10 ) and see what is using up all your memory and your disk I/O.

                                K Offline
                                K Offline
                                KaoN
                                wrote on last edited by KaoN
                                #15

                                @JKSH Thank you for your reply, but my desktop has 64GB memory, I don't think it cause the problem.
                                The question is with 5.9.9, it works fine, with only 10MB memory consumption.

                                JKSHJ 1 Reply Last reply
                                0
                                • K KaoN

                                  @JKSH Thank you for your reply, but my desktop has 64GB memory, I don't think it cause the problem.
                                  The question is with 5.9.9, it works fine, with only 10MB memory consumption.

                                  JKSHJ Offline
                                  JKSHJ Offline
                                  JKSH
                                  Moderators
                                  wrote on last edited by
                                  #16

                                  @KaoN said in Slow performance and large memory usage with QTableView in Qt 5.15:

                                  The question is with 5.9.9, it works fine, with only 10MB memory consumption.

                                  It's possible that the implementation of QTableView changed between Qt 5.9 and Qt 5.15 which provides better performance in some use-cases but worse performance in other use-cases.

                                  Do you have Qt 5.12 LTS installed? How does it perform with that version?

                                  You can post your minimal test code and provide instructions on how to cause the slowdown to https://bugreports.qt.io/. However, it is still not clear to me whether it is a bug/regression or not.

                                  Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

                                  K 2 Replies Last reply
                                  0
                                  • JKSHJ JKSH

                                    @KaoN said in Slow performance and large memory usage with QTableView in Qt 5.15:

                                    The question is with 5.9.9, it works fine, with only 10MB memory consumption.

                                    It's possible that the implementation of QTableView changed between Qt 5.9 and Qt 5.15 which provides better performance in some use-cases but worse performance in other use-cases.

                                    Do you have Qt 5.12 LTS installed? How does it perform with that version?

                                    You can post your minimal test code and provide instructions on how to cause the slowdown to https://bugreports.qt.io/. However, it is still not clear to me whether it is a bug/regression or not.

                                    K Offline
                                    K Offline
                                    KaoN
                                    wrote on last edited by
                                    #17

                                    @JKSH Yes, I tried 5.12.7, slow too.
                                    Bug is reported with minimal code: https://bugreports.qt.io/browse/QTBUG-86069?filter=16824

                                    1 Reply Last reply
                                    0
                                    • JKSHJ JKSH

                                      @KaoN said in Slow performance and large memory usage with QTableView in Qt 5.15:

                                      The question is with 5.9.9, it works fine, with only 10MB memory consumption.

                                      It's possible that the implementation of QTableView changed between Qt 5.9 and Qt 5.15 which provides better performance in some use-cases but worse performance in other use-cases.

                                      Do you have Qt 5.12 LTS installed? How does it perform with that version?

                                      You can post your minimal test code and provide instructions on how to cause the slowdown to https://bugreports.qt.io/. However, it is still not clear to me whether it is a bug/regression or not.

                                      K Offline
                                      K Offline
                                      KaoN
                                      wrote on last edited by
                                      #18

                                      @JKSH The weird thing is that I did get good performance after I reboot my desktop, but it did not always working..actually, it only works once.

                                      J.HilkJ 1 Reply Last reply
                                      0
                                      • Christian EhrlicherC Offline
                                        Christian EhrlicherC Offline
                                        Christian Ehrlicher
                                        Lifetime Qt Champion
                                        wrote on last edited by
                                        #19

                                        I'm pretty sure your Qt example has nothing to do with this.

                                        Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                                        Visit the Qt Academy at https://academy.qt.io/catalog

                                        1 Reply Last reply
                                        0
                                        • K KaoN

                                          @JKSH The weird thing is that I did get good performance after I reboot my desktop, but it did not always working..actually, it only works once.

                                          J.HilkJ Online
                                          J.HilkJ Online
                                          J.Hilk
                                          Moderators
                                          wrote on last edited by
                                          #20

                                          @KaoN have you done a full hard shutdown or only the soft one that comes when opening the start menu ?

                                          hit win + r
                                          
                                          then type:
                                          shutdown /s /f /t 0
                                          

                                          Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                                          Q: What's that?
                                          A: It's blue light.
                                          Q: What does it do?
                                          A: It turns blue.

                                          K 1 Reply Last reply
                                          2

                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved