by Guest on 2015/07/09 09:58:17 AM
To the developers of Tixati:
I have discovered why Tixati hangs for minutes at a time. It is simple to see for yourselves too.
There is a severe problem with the way your code handles certain Windows messages.
You can see the problem for yourself by running Microsoft Spy++. The problem manifests itself all over the place, but seems to stem from your custom draw and window positioning code.
For example, run Spy++, place a message watch on Tixati and minimize Tixati to the system tray. You will see an endless stream of LVM_GETCOLUMNWIDTH, HDM_GETITEM, LVM_GETCOLUMNORDERARRAY, and so on messages. It seems that Tixati is constantly polling column widths (presumably to either arrange them or else decide whether to cut off text that is too long). Either way, there is no need to do this when the program is in the system tray because nothing is visible. Even when it is visible, Tixati should not be doing this constantly, only when something changes. Only you know the internals of your code, but it is in serious need of some optimization in the drawing code. I notice that all of your buttons seem to be owner draw. Is the paint code for those triggering the above? You should run Spy++ and watch your program to see what is causing the painting loops.
Another example is where the Tixati "Add New Transfer" dialog is displayed. Here you get an endless stream (as in tens of thousands) of WM_WINDOWPOSCHANGING and WM_WINDOWPOSCHANGED messages, all related to the emenuXXXXXXXXXXXXX windows that Tixati has hundreds of instances of. Only you as the coders know what these are, but my guess is that they're popup menus? In which case, my further guess is that every time a new window appears your code is running through some "reposition the windows" code, and that code is processing every window in your program. As there are hundreds of these emenuXXXXXXXXXXXXX windows, this is not quick. Looking at the messages, it would appear that your code is changing the Z position of all those emenuXXXXXXXXXXXXX windows, which aren't even visible, so this is completely unnecessary. I would suggest that the emenuXXXXXXXXXXXXX windows are either replaced with something less resource intensive, are replaced with a single instance that is dynamically altered as necessary, or you simply don't reposition those windows when they are not visible.
I bet the same thing is happening when Tixati hangs at program startup too (although I haven't tested that).
I hope you take this is the way it is intended and that it helps you to improve Tixati, because I have been using it for years now, but these hangs for minutes at a time are really annoying.