[PyQt] Performance of QTreeView

Knacktus knacktus at googlemail.com
Sun Oct 10 12:50:39 BST 2010


Am 10.10.2010 13:01, schrieb Virgil Dupras:
> It probably has something to do with the bazillions of parent() call
> that are made to your model. I asked a similar question on stack
> overflow a while ago. I profiled the example, so the bottleneck is
> evident.
>
> http://stackoverflow.com/questions/841096/slow-selection-in-qtreeview-why
>
> So the answer is: In some respects, Qt sucks balls.
>
> Regards,
> --
> Virgil Dupras
> Hardcoded Software
> http://www.hardcoded.net

Thanks for your reply. I've used your profiling instructions (never done 
that before, so another thing learned;-)) and now I'm puzzled...

In my example with just 500 Items(!!) Qt calls some of the model methods 
125000 times for one "expandAll()" call!!!!

What!?!?

Does anyone know something about that?

Here's the profiling data:



Sun Oct 10 13:23:55 2010    profdata

          896930 function calls in 8.202 CPU seconds

    Ordered by: internal time

    ncalls  tottime  percall  cumtime  percall filename:lineno(function)
         1    5.885    5.885    8.202    8.202 {built-in method exec_}
    125853    1.238    0.000    1.943    0.000 
C:\Users\Jan\Desktop\Integrations-System\Source\ipdm\QTreeView_Performance.py:220(parent)
         1    0.336    0.336    2.301    2.301 {built-in method expandAll}
    128294    0.239    0.000    0.300    0.000 
C:\Users\Jan\Desktop\Integrations-System\Source\ipdm\QTreeView_Performance.py:235(view_item_from_index)
    127372    0.212    0.000    0.217    0.000 
C:\Users\Jan\Desktop\Integrations-System\Source\ipdm\QTreeView_Performance.py:53(children)
    125734    0.179    0.000    0.179    0.000 {built-in method createIndex}
    128294    0.040    0.000    0.040    0.000 {built-in method isValid}
    125045    0.028    0.000    0.028    0.000 {method 'index' of 'list' 
objects}
    128168    0.020    0.000    0.020    0.000 {built-in method 
internalPointer}
      1638    0.008    0.000    0.023    0.000 
C:\Users\Jan\Desktop\Integrations-System\Source\ipdm\QTreeView_Performance.py:180(rowCount)
       689    0.004    0.000    0.008    0.000 
C:\Users\Jan\Desktop\Integrations-System\Source\ipdm\QTreeView_Performance.py:215(index)
       801    0.003    0.000    0.004    0.000 
C:\Users\Jan\Desktop\Integrations-System\Source\ipdm\QTreeView_Performance.py:195(data)
       500    0.002    0.000    0.005    0.000 
C:\Users\Jan\Desktop\Integrations-System\Source\ipdm\QTreeView_Performance.py:80(get_view_item_children)
       499    0.002    0.000    0.002    0.000 
C:\Users\Jan\Desktop\Integrations-System\Source\ipdm\QTreeView_Performance.py:46(__init__)
      1018    0.002    0.000    0.002    0.000 
C:\Users\Jan\Desktop\Integrations-System\Source\ipdm\QTreeView_Performance.py:192(columnCount)
       114    0.001    0.000    0.001    0.000 
C:\Users\Jan\Desktop\Integrations-System\Source\ipdm\QTreeView_Performance.py:208(headerData)
      2678    0.000    0.000    0.000    0.000 {len}
         1    0.000    0.000    2.301    2.301 
C:\Users\Jan\Desktop\Integrations-System\Source\ipdm\QTreeView_Performance.py:141(expand_all)
       114    0.000    0.000    0.000    0.000 {built-in method column}
       114    0.000    0.000    0.000    0.000 {getattr}
         1    0.000    0.000    8.202    8.202 <string>:1(<module>)
         1    0.000    0.000    0.000    0.000 {method 'disable' of 
'_lsprof.Profiler' objects}


More information about the PyQt mailing list