Postby ConvertFromOldNGs » Fri Aug 07, 2009 11:31 am
by cnwjhp1 >> Mon, 5 Jul 2004 6:39:34 GMT
The rap, appserver and fat client nodes are all "Jade nodes", ie they run the Jade Object Manager (jom) and the Jade Interpreter. Thus they all have object caches, method caches, etc and they can execute Jade methods.
The presentation client node does not have these, so Jade objects and Jade methods are not stored there. A great deal of "smoke and mirrors" goes on to make external entities seamlessly (to the Jade programmer) relative to the presentation client, eg printers, files, locales etc. Even external functions can be executed from the presentation client, requiring the .dll to be present on the client workstation. In all these cases, communication is required with the appserver, where the Jade methods and Jade objects are. So when your Jade code examines the contents of a textbox and sets the foreColor of a label accordingly, the Jade method execution happens only in the appserver, and the gui controls are only on the client. This requires a number of messages between the presentation server (appserver) and the presentation client. These are buffered where possible, and proxy objects are maintained in the appserver to minimise network traffic. Hence Jade "Smart" Thin Client. You could visualise a fat client split in half, resulting in an appserver handling the objects and methods on the server machine, and the thin client handling the gui on the client workstation.
With this in mind, consider the .ini file settings in a rap / appserver / thin client environment. The JadeClient section applies to the appserver (since it opens the database as a client), so JadeClient.ObjectCacheSizeLimit specifies how much memory to allocate to Jade objects held in the appserver. JadeServer.ObjectCacheSizeLimit specifies how much memory to allocate to Jade objects held in the server node, ie the rap, but this is only used by serverExecution methods. PersistentDb.ObjectCacheSizeLimit is also allocated in the rap, but is not used directly by methods. There is no ObjectCacheSizeLimit in the JadeThinClient section. So, if you didn't realise all this and set JadeClient.ObjectCacheSizeLimit small but set JadeServer.ObjectCacheSizeLimit large, you could get poor performance of database-intensive activity unless you use serverExecution.
Another possibility, as Richard pointed out, is that you were using tcp prior to Jade 6. The appserver has to fetch all objects from the rap via the tcp stack. And activities like locks and global.isValidObject can involve multiple round trips to the rap. This tcp activity (between rap and appserver on the same copy of Windows) shows up as cpu time. So using NetworkSpecification2=JadeLocal,Enabled,MyDb could speed up database-intensive activity from an appserver, especially if your cpu is relatively slow. One test I did recently (cloning a tree of 958 objects) took 2.0 seconds using tcp, 1.4 seconds using JadeLocal.
Cheers,
John P