[GNC-dev] Slow user interface in 3.x gnucash: Online transaction import painfully slow - with workaround

Christian Stimming christian at cstimming.de
Sun Jun 24 14:48:25 EDT 2018


Dear developers,

as I'm still in the process of migrating my everyday work from 2.6.x gnucash 
to 3.x gnucash, I enountered some places where the user interface is still 
quite slow in current 3.x gnucash compared to the old one. I've fixed on such 
issue in the last days, but other remain.

One such place that seems painfully slow is the online transaction import 
(using aqbanking with a German HBCI bank account). After the connection log 
window closes, it took literally minutes until the transaction-matching window 
appeared. During this step, the imported transactions should be matched 
against potentially existing ones with the identical online_id, and suggested 
matches for all the non-matching ones are being calculated. (After editing 
normally there, clicking "Ok" was additionally very slow, but let's focus on 
the first step.)

By looking into this with valgrind/callgrind, it turns out that the register 
windows keep getting refreshed a lot, i.e. gtk_widget_draw is called several 
ten thousands times during this phase. This is quite weird. Of course the UI 
shouldn't get updated during the calculation step, and only after this is 
finished the UI update should be activated again.

Here's the workaround: I closed all account register windows, and select the 
online actions by selecting my online account in the account tree widget as 
selected item. When calling the online transaction download now, there is no 
large delay anymore! (i.e. the behaviour is practically identical to 2.6 
gnucash)

This seems quite weird to me. It seems there is no gnc_suspend_gui_refresh / 
gnc_resume_gui_refresh pair for this first step before the matcher window 
opens, so maybe this needs to be inserted in the correct place. However, in 
2.6 gnucash this was missing, too, and it didn't seem to be a problem.

Also, on clicking "Ok" there is such a suspend/resume pair (in import-main-
matcher.c lines 160ff), unchanged from 2.6 to now, but in my first tests when 
the register windows are open, this step has just as well a minute-long delay 
similar to the first step.

Anyone an idea on what might be missing? Thanks for pointers. 

Unfortunately I didn't find an easy method to reproduce this without online 
account. Maybe some of the file imports show this as well, but so far I didn't 
encounter it except with the online account.

Regards,

Christian



More information about the gnucash-devel mailing list