WindX screen rendering performance

Started by ChrisKCAi, February 06, 2023, 04:17:41 PM

Previous topic - Next topic


We have traditionally used RDP as our "client" to a Windows backend server running PxPlus. We are actively testing using WindX (*plus/cs/client) connecting to the Simple CS Server (*plus/cs/host) on a Windows server instead. There is a noticeable lag in screen (we use Nomads) rendering on the client using WindX vs. RDP when connecting to the same server. We are testing with a web license installed on the server and with 'TU' and '+W' enabled - are there additional tips/tricks/settings/optimizations we can take advantage of? I know when dealing with images, it's optimal to have the images resident on the local client, but I am talking about just basic panel & control drawing - looking for ways to improve that. Any help is appreciated.

Mike King

There are a number trade offs you need to be aware of when using WindX vs RDP.  Here are a few:

  • When creating/loading controls such as list boxes and grids, RDP will need to transmit enough data to draw the current visible contents of the control, whereas WindX will (by default)  upload the  whole list/grid contents.  So if you load a list of say 10,000 items WindX needs to send the information of 10,000 items to the workstation whereas RDP only sends the first page full which would be around 20 items.  On the flip side though if the user scrolls through the list or sorts the list by selecting a column header RDP will need to send each new page full of data whereas WindX will send/receive nothing as the data is already present on the workstation.  Now you can resolved the up-front loading with WindX if when using lot of large lists you enable load on demand which will only forward those records needed.

  • When accessing images WindX provides the ability to upload the image to the workstation for fast retrieval.  Enable the WindX auto upload for images to improve performance.   As for RDP, generally images will have to be uploaded as displayed.  While RDP does provide a similar option (if enabled) the caching is by session thus every time a new session starts the images will need to be reloaded.

  • If running lots of users WindX will reduce the load on the server since it does not require a copy of Windows and your application controls to exist on the server for each user.  When using RDP, each workstation will have effectively a full copy of Windows on the server along with all the controls and their contents, so if you have multiple users with numerous large list boxes each user will have its own copy of the list box contents in the server memory.  With WindX the overhead for the controls is distributed to the workstations and you only end up with the PxPlus application direct memory requirements on the server.

  • When referencing control properties try to minimize reading properties.  Every time you application reads a property the system will have to send a request to WindX to get the value and wait for the value to be returned.  With RDP the controls are maintained on the server so reading a property does not involve any network traffic.  Setting properties are not a problem as the updates simply get forwarded to WindX for processing and the system does not have to wait for response.  One thing to avoid is creating a loop that reads the same property over and over such as:

      WHILE 1
      IF ++item > listBox'ItemCount break

    This type of logic will require the 'ItemCount property to be read on every iteration.  Pre-read the Itemcount and save it.

  • Where viable use Pseudo Multi-properties as these can be used to return multiple property values in a single request.  See

  • When using GRIDs in WindX read the complete row (using 'RowData$) or even the complete Grid (using GRID FIND) and process it rather than reading the grid a cell at a time.  Each read will require a request being sent to the workstation and response received.  Reading multiple values in a single exchange improves performance.  This is a general comment about Grids regardless how you are running as accessing multiple cells is slower than a single read.

  • RDP does not directly provide a way to access local files on the workstation whereas WindX does (based on user authorization).  If your application needs to access local files you may require WindX.

Generally a well designed application on a fairly high speed network connection can run comparable to RDP. 

What is important to remember is that when using RDP almost every user interaction will require a screen update from the host (e.g. opening a drop box, scrolling a list, hovering a mouse over a control to see the tip, even typing data into a input field), whereas with WindX only true changes to controls will potentially require host interaction as WindX creates the controls locally.  Fundamentally screen loads may be slower with WindX but general navigation and user interactions will often be faster.

Mike King
President - BBSysco Consulting


If you are going over the internet there are many things that can slow it down.  Depending on what method you are using to connect (cs, telnet, ssh, app server, SSL)  but within *winproc there are number of features that may or may not be needed that slow performance on internet connections (Even fast ones)

I went through *winproc and commented out many sections that I found slowed things down for me and sped things up tremendously, however you may lose some features, but you may not be using them anyway.

For example there is a "Check customization" section that for me really slowed things down you can try to disable that if you don't need that feature.

Also in *winproc.rsz  there is a CHECK_MANUAL_MANIPULATION that can slow down folders

Screen resizing is also slower remotely but those fixes may help, if you have a fixed window its much faster but you need to accommodate different resolutions which may be difficult.

These two are probably offer the most improvement.

This can truely only be appreciated by working remotely over the years :)  If you are local on a LAN things will be much faster.


Hope the following few tricks that can save Dev and network time with nomads are helpful.

Put as little configuration in Nomads as possible. Especially for grids.
Use the Nomads variables as much as possible ie. PERFORM ";Change"+ID$
Minimize control network traffic with Pseudo Multi-Properties or Multi-Property Access

Grids have the most speed complaints so the following really speeded things up.
Read/write by linedata records. 
Use Pseudo Multi-Properties to configure. Every . removes a network round trip.
load data first in the largest string(s) you can transfer.  I've been using gMaxSize=500000
Add Minimal colors afterwards and send in as few Pseudo Multi-Properties strings as possible.
Use the grd'Fmt$ to both configure the grid and return the IOLIST. 
Its not possible to mix and match every property in one Multi-Properties submission, especially fmt$.
A bonus to FMT$ is easy editing of named fields to match files, OTF grid formatting and easy sorts and column swapping.  Iolists don't care about column order, control properties do.   
Use the Sheet'Range()'PasteSpecial() for loading grids to Excel and/or clipboard tabbed delimited for non excel
IF windows server & client the MS safe array method works well too