Quicken is slow to delete investment transactions

Fred Coale
Fred Coale Member ✭✭
edited November 2018 in Investing (Windows)
When deleting transactions from an investment account, the response time is very slow - as in 10 seconds per transaction. Deleting multiple transactions using the Banking Transaction report is just as slow (10 items will take about 100 seconds).   

Watching the performance monitor while it's deleting, I see the CPU is barely used (about 6-7%), plenty of memory available, and the Disk I/O barely registers (about 50KB/second). I suspect the program's interaction with data is the culprit (e.g. excessive table indexing) but have no way to confirm this.  The Quicken file is minuscule, so I'm baffled why the program can't use all the PC's resources.  What's the constraint?  

One peculiar thing I see happening is that the program is refreshing the screen after each and every delete.  The last thing it does is refresh the report, again one line at a time.  Both these functions seem unnecessary and inefficient.  

The problem of slow response time, as most long-time users are painfully aware, is nothing new. I've tried a variety of techniques to reduce the number of transactions (including completely new accounts) but after a few years, it gets slower.. and slower.... and slower...... and slower. 

I've validated the file and tried all the common techniques. I'm posting this question hoping someone from Quicken with a technical background can comment.  Cheers.  image

Comments

  • Unknown
    Unknown Member
    edited October 2018
    I seriously doubt any person from Quicken is going to comment on this.
    This is in the realm of the developers, and they don't come here.

    As a 35+ years programmer I will give you my take on it.
    On the report and doing things like delete, changing categories, ...

    Basically the programmer took the easy way out and wasn't concerned about efficiency.
    In other words, they found a function to do "one" and simply put that in a loop for each transaction selected.  Instead of coming up with a way to just issue a delete command for all the transactions at once and then when they come out of that have the report refresh one time.

    But I might point out that the reason people use the banking report(s) to  change investment transactions is because they never bothered to put in these functions into the investment registers.

    This "GUI" approach is seen all through Quicken.  As in lots of things are implemented as if a user is doing something one click at a time, instead of calling something at a lower level that can do the work and return.

    On the slowness of the investment account vs a banking account.
    You really can't compare the two.  They have very different jobs to do.

    If you look at the banking register I can take any of the transactions based on any filters, put them in the GUI and the only thing that needs to be computed is the running balance.

    If you look at the investment register you have multiple securities, with multiple lots that all have to be connected/computed for each transaction shown.  There is just a lot more data, and computing to do.

    But on top of that I also believe that the GUI components, in the investment register, is constructed in an inefficient manner.

    Could this all be made to be faster by precomputing information, and using a better GUI layout, and overall better data structures?

    I certainly think so, but it actually isn't the point.

    People tend to think that work is optimize to get to the "best".
    But instead it works like evolution, it is optimized to "just good enough".

    Everything takes time to do, and as such they have to decide what is important at that moment in time.  If the investment registers are "OK" for 95% of your users you don't go in and optimize to make it work better for the 5%.  You have much more pressing matters elsewhere.
  • Unknown
    Unknown Member
    edited October 2018
    P.S. "Watching the performance monitor while it's deleting, I see the CPU is
    barely used (about 6-7%), plenty of memory available, and the Disk I/O
    barely registers (about 50KB/second). I suspect the program's
    interaction with data is the culprit (e.g. excessive table indexing) but
    have no way to confirm this.  The Quicken file is minuscule, so I'm
    baffled why the program can't use all the PC's resources.  What's the
    constraint?  "

    It is baffling.  And there is basically only three possible answers.
    1. Programmed waits.
    2. Waiting on hardware.
    3. Using resources that don't show up in the task manager.
    #1 This can be in their code or it can be in say some GUI code.
    #2 Waiting on hardware (like the GPU) isn't recorded in any process.
    #3 This is basically #2 but also recognizing that there some parts of the operating system that are so low level they don't track them in the Task Manager because they aren't associated with any process.
  • Jim_Harman
    Jim_Harman SuperUser ✭✭✭✭✭
    edited November 2018
    How do you make that File Information display shown above? Does your system only have 2 gigs of memory, or am I reading it wrong?
    QWin Premier subscription
  • Jim_Harman
    Jim_Harman SuperUser ✭✭✭✭✭
    edited March 2017

    How do you make that File Information display shown above? Does your system only have 2 gigs of memory, or am I reading it wrong?

    OK, I figured that its is Help then Ctrl-click on About Quicken. But the memory reported is weird - My system has 8 gigs but the amount available shows as 2097151,  exactly the same as Fred's report above. 
    QWin Premier subscription
  • Unknown
    Unknown Member
    edited March 2017

    How do you make that File Information display shown above? Does your system only have 2 gigs of memory, or am I reading it wrong?

    Quicken is a 32-bit program as such the typical max memory it can allocate is 2GB.
    There is some exceptions to the rule for the right kind of hardware Quicken does seem to be able to get up to about 3.5GB (which is the absolute for a 32-bit Windows program).

    But all of that is pointless.  Quicken consumes less memory than your web browser.
    The only time I have ever seen Quicken consuming anything close to 1GB of memory is when there was a memory leak in Quicken 2015's QIF import, and it was on its way to crashing because it ran out of memory.
  • Jim_Harman
    Jim_Harman SuperUser ✭✭✭✭✭
    edited August 2017

    How do you make that File Information display shown above? Does your system only have 2 gigs of memory, or am I reading it wrong?

    Got it. Thanks for the clarification.

    I agree some operations appear to be simulating key clicks in the GUI. For example moving shares between accounts when there are a lot of tax lots involved is very slow.

    In most cases these are things you (hopefully) don't do very often, so I guess the ability to do it at all is worth the wait.
    QWin Premier subscription
  • Unknown
    Unknown Member
    edited October 2018
    BTW at one point I needed to delete thousands of investment transactions out of a few accounts, and that was taking hours, so I worked out a way to speed it up quite a bit.

    What I did is select a few hundred transactions from the end of the report, and then repeat.

    The reason this speeds it up is because say you select all them.  What they are going to do is delete the first transaction, and then the report is going to be refreshed.  Well this means that they have to recompute all the numbers from the 2 transaction onward.  If you delete the last transaction in the report it doesn't have to recompute anything after that point.  So limiting how far back you delete limits how much it recomputes for each refresh.
  • Fred Coale
    Fred Coale Member ✭✭
    edited March 2017
    QPW said:

    I seriously doubt any person from Quicken is going to comment on this.
    This is in the realm of the developers, and they don't come here.

    As a 35+ years programmer I will give you my take on it.
    On the report and doing things like delete, changing categories, ...

    Basically the programmer took the easy way out and wasn't concerned about efficiency.
    In other words, they found a function to do "one" and simply put that in a loop for each transaction selected.  Instead of coming up with a way to just issue a delete command for all the transactions at once and then when they come out of that have the report refresh one time.

    But I might point out that the reason people use the banking report(s) to  change investment transactions is because they never bothered to put in these functions into the investment registers.

    This "GUI" approach is seen all through Quicken.  As in lots of things are implemented as if a user is doing something one click at a time, instead of calling something at a lower level that can do the work and return.

    On the slowness of the investment account vs a banking account.
    You really can't compare the two.  They have very different jobs to do.

    If you look at the banking register I can take any of the transactions based on any filters, put them in the GUI and the only thing that needs to be computed is the running balance.

    If you look at the investment register you have multiple securities, with multiple lots that all have to be connected/computed for each transaction shown.  There is just a lot more data, and computing to do.

    But on top of that I also believe that the GUI components, in the investment register, is constructed in an inefficient manner.

    Could this all be made to be faster by precomputing information, and using a better GUI layout, and overall better data structures?

    I certainly think so, but it actually isn't the point.

    People tend to think that work is optimize to get to the "best".
    But instead it works like evolution, it is optimized to "just good enough".

    Everything takes time to do, and as such they have to decide what is important at that moment in time.  If the investment registers are "OK" for 95% of your users you don't go in and optimize to make it work better for the 5%.  You have much more pressing matters elsewhere.

    Very true.  Given the prevalence of cloud computing, the Windows product may be near the end of its platform life cycle anyway.  
  • Fred Coale
    Fred Coale Member ✭✭
    edited March 2017
    QPW said:

    BTW at one point I needed to delete thousands of investment transactions out of a few accounts, and that was taking hours, so I worked out a way to speed it up quite a bit.

    What I did is select a few hundred transactions from the end of the report, and then repeat.

    The reason this speeds it up is because say you select all them.  What they are going to do is delete the first transaction, and then the report is going to be refreshed.  Well this means that they have to recompute all the numbers from the 2 transaction onward.  If you delete the last transaction in the report it doesn't have to recompute anything after that point.  So limiting how far back you delete limits how much it recomputes for each refresh.

    That makes sense, but I would have expected the CPU would be screaming during all the re-computation.  However, as you pointed out, if it's just simulating a "one-line" click over and over, the CPU or disk I/O may not be the constraint. 

    With enough PC power to read the entire file in about 0.1 second, it's frustratingly slow.  The networked version must be completely different, as it could never get away with that kind of "chatty" transaction.  
     
  • Unknown
    Unknown Member
    edited November 2018
    QPW said:

    BTW at one point I needed to delete thousands of investment transactions out of a few accounts, and that was taking hours, so I worked out a way to speed it up quite a bit.

    What I did is select a few hundred transactions from the end of the report, and then repeat.

    The reason this speeds it up is because say you select all them.  What they are going to do is delete the first transaction, and then the report is going to be refreshed.  Well this means that they have to recompute all the numbers from the 2 transaction onward.  If you delete the last transaction in the report it doesn't have to recompute anything after that point.  So limiting how far back you delete limits how much it recomputes for each refresh.

    Personal I have never "understood" GUIs requirements for being so inefficient.

    My career was more "systems" as in the core code.  I have seen where fetching 100,000 record from a database, even more lines of data from a data file can be done in basically the blink of an eye.

    But with most GUIs if you put more than say 1000 items in a list without it being "virtual", it will ground to a halt!

    I can give you an example of how you use very little CPU time and still be waiting.
    Say I have a large spreadsheet and change one number on it and then call the system to refresh the graphics.  Now I have is situation where the time the CPU took to do the number change could be much shorter than the time the refreshing of the graphics takes.  Now do that a million times.

    What you will see is very little CPU time, but you can still be waiting around.  The Task Manager doesn't show non disk/network I/O.
  • Fred Coale
    Fred Coale Member ✭✭
    edited August 2017

    I never did find a reason why transaction deletes are so
    slow, but I found two work around solutions. 
    Both solutions create a new, smaller account that is faster to work with
    from that point forward. The basic strategy is to: 

    A.    
    Create a new account which will be used to
    receive open investments from an existing account.  

    B.    
    Transfer the investment information from the old
    account to the new account.  This can be done either in summary or detail (see below).

    C.    
    Activate online services for the new account,
    Deactivate the old account.

    Obviously, back-up your data before starting.    

    Transfer In Detail:  This method automatically transfers
    investments from one account to another using a built in Quicken
    function.  NOTE: There is very little
    consolidation of information with this function.  All dividend and buy/sell
    history for any security with a non-zero share balance is transferred to the new account. 
     

    1.     
    From the Investment register, click Enter
    Transactions -> Shares Transferred Between Accounts. Select either One
    Security or All Securities.

    2.     
    Enter the new account which will receive the
    securities. 

    Transfer In SummaryThis method manually transfers investments, in summary, from one account to another to produce a new account with minimal information about each security (just share
    balance and cost basis).  No lot information or history is moved. The history is still available for reporting and such, so long as you don’t delete the old account.

    1.     
    Run a Quicken report to produce a summary list of
    investments, including the shares and cost basis of each security. Reports -> Investments ->
    Portfolio Value

    2.     
    Using the report, add the total shares of each
    security to the new Account. Enter
    Transactions -> Add – Shares Added

    3.     
    Using the report, remove the shares from the old
    account.  Enter Transactions -> Remove
    – Shares Removed

    4.     
    Run the Portfolio Value report on the new
    account to confirm the totals match and all the securities were moved
    correctly.  

This discussion has been closed.