Cursor performance in LabView 8.2.1 is dramatically worse than LabView 7.1.
The attached LabView 7.1 VI populates a graph with {1, 10, 100, 1000, 10000, 100000} cursors by generating an array of cursor clusters and setting the CursorList property.
Execution time for plotting 111,111 cursors using the CursorList property is as follows:
LV 7.1 : 23 seconds
LV 8.2.1 "OldCurs": 1825 seconds
LV 8.2.1 "NewCurs": 1875 seconds
That's not a typo: for 100,000 cursors, LV 8.2.1 is 100 times slower than LabView 7.1.
(The cursor definition changed in LabView 8, so when you try this on LabView 8, you will probably want to try running with both the backwards-compatibilty "OldCursList" property and the new LV 8 native CursList. That's what "OldCurs" and "NewCurs" refer to above. Performance is equally awful.)
LabView 8.2.1 seems to have O(n^2) running time (vs O(n) in LabView 7.1), so the speed differential gets larger and larger as more cursors are added to the graph. This can be seen in the attached log-log plots. Note that the LabView 7.1 graph is reasonably linear and goes to 10^6 cursors while the LabView 8 graphs go to only 10^5 cursors; this was because LabView 8 had not finished running after 3 hours. I gave up.
I have previously filed a related bug on this issue (#831169, "can't open graph containing 25,000 cursors in LV 8") which was "resolved" in the LabView 8.2.1 release notes. ("3YT8QDTC: Fixed an issue where LabVIEW hangs or crashes when you open a VI that contains a graph with thousands of cursors".) This bug was fixed but the underlying performance issue was not addressed. There is simply no reason why objects cannot be drawn on a graph in linear time, and LabView 8.2.1's performance is very much worse than that.
The poor performance of LabView 8 cursors is causing significant performance problems for my application. I use thousands of cursors in my application because I am placing text labels on thousands of points pulled from a database. (This cursors are not draggable; this should not require any fancy event handling.) I will have to artificially limit the number of displayed cursors to 5,000 or less in order to avoid apparent hangs in the application.
Another minor issue: in LabView 8, the CursorList is a typdef array of a non-typedef'd cluster. This is poor style. One of the first things we hammer into any new LabView developer is that you should typedefs your clusters and build non-typedef arrays from those typedef clusters. The Cursor cluster has needed to be a typedef for a long time, but the LabView 8.2.1 implementation is backwards and results in coercion dot when writing to the property node without giving any of the advantages of a typdef'd cluster.
Sincerely yours,
Rob Calhoun