Hi Martin,
Calling sub-VI's should incur very little over-head (I've heard 1-2usec per call), so calling sub-VI's should not cause much of a problem. Ther are two exceptions to this (that I can think of now).
1) Repeated calls. If you call the sub-VI's frequently (i.e. in a loop) then the call over-head could be an issue. If this is the case, try restructuring the code such that loop is inside the sub-VI. This will reduce the load (of that part of the code) by a factor similar to the loop count.
2) Large data structures. Wiring large structures into/out-of sub-VI's can take conciderable time. Try to pass the smallest amount of data in and out.
Now on the topic of "priority". I suggest you work with the profiler and timers first, to improve the performance of your co
de. Manipulating the priority should be done only after all other possibilities have been exausted. Manipulating priority can cause as many problems as it solves.
If it seems that the only option left is priority then start by identifying those portions of the code that take a long time. Set their priority DOWN, to let other tasks do their work quickly and get out of the way for the "pig" to run again.
If the app is now acceptable, stop. Further changes to priorities code make things worse.
NOTE:
Make sure you have "wait ms timers" in all your loops that let them run only as often as absolutly required.
I hope this helps,
Ben