Performance critical GUI application (windows,linux)


I've been tasked with updating a series of applications which are performance critical VB.NET apps that essentially just monitor and return networking statistics. I've only got three requirements: convert it to C#, make it fast, and make it stable

One caveat is that we "may" migrate from a .NET platform to linux "soon"

I will be responsible for maintaining these apps in the future so I'd like to do this right. I have decided to refactor these apps according to the MVP pattern so that I can properly unit test the hell out of this bad boy. But I was also thinking since I was using MVP that I could also do the computationally expensive stuff in native C/C++ code while the GUI would be done with .NET forms, or Qt or whatever.


  1. does it make sense to do a GUI in winforms but the expensive stuff in native, unmanaged C/C++ ?

  2. any recommendations for a good cross platform windowing kit that would fit for the scenario described above?

By : eviljack


gtk-sharp is a pretty nice cross platform toolkit.

Gtk# is a Graphical User Interface Toolkit for mono and .Net. The project binds the gtk+ toolkit and assorted GNOME libraries, enabling fully native graphical Gnome application development using the Mono and .Net development frameworks.

By : Jacksonh

I had similar dilemma some time back, while trying to find out a best way to develop a PC based H/W Testing tool (which obviously means "with UI options") that interacts with an embedded hardware (via PCMCIA interface).

The bottleneck was that the testing should run at maximum deviation of 10ms from the intended time specified by the tester.

E.g: If the tester creates the following test sequence:

    1. Remotely activate the H/W
    2. Wait for 50ms delay.
    3. Read an H/W information.

the delay mentioned in step 2 should not be > 60ms.

I chose C++ WIN32 application as my back-end and VC++ 2005 Winform (.NET platform) for UI development. Detailed information on how to interface these two is available in msdn
I segregated the system like this:
In VC++ .NET:

    1. UI to have complete information about the H/W (read via back-end application) and to control the H/W on demand. (Buttons, combo-box etc.. etc..)
    2. UI to run time critical test sequences (as mentioned in the above example).
    3. Gathering these information and building a stream (File-stream) in a Time-linear format (i.e, in the precise order of steps in which it has to be performed).
    4. Triggering and hand-shaking mechanism (by redirecting standard input and standard output) with WIN32 back-end application. The common resources will be the File-streams.

In C++ WIN32:

    1. Interpreting the Input File-Stream.
    2. Interaction with H/W.
    3. Gathering information from H/W and putting it in its Output File-Stream.
    4. Indication of test completion to UI (via redirected standard output).

The complete system is up and running. It seems to be pretty stable. (Without the timing deviation mentioned above).
Note that, the testing PC we use is solely for the H/W Testing purpose (it had just the UI running on it, with no auto-updates, virus scan etc.. etc.. ).

By : Raptor

The c/c++ stuff may end up being a good idea, but right now YAGNI. Same with the Linux stuff. Ignore it, you ain't gonna need it until you need it. Keep it simple. Unit test the hell out of it, as you say. Get the code working and evolve the design from there.

This video can help you solving your question :)
By: admin