Windows-User-Objects

Author: i2stiller@gmx.de (istiller)

Hi freaks We run into a little bit of trouble with the number of USER-Objects under windows. If a user opens "to much" forms, UnifAce will crash. After a few investigation, the cause was found as more then 10.000 open USERObjects. Okay, some can say, that our application is out of date, but ...

  1. Anybody else do have the same problems?
  2. Does UnifAce allways close unused Handles. Or will there be garbage after a while?
  3. Is there a proper way to check the number of USERHandles within UnifAce?     I did find a way under Windows 7 (by some windows API), but under XP or Server 200x, you got not the open handles by application but by windows session.

Any tips/hints are wlcome Kind regards Ingo

2 Comments

  1. We have encountered this problem, and regularly set the number of handles on our windows clients to 15000.  Our app design can wind us up with tens of tabs with many fields of four different entities painted on each, until we worked out that the problem was user handles, our users would report that some of the fields just 'failed to show up'.


    Author: Iain Sharp (i.sharp@pcisystems.co.uk)
  2. Hi Ingo,

    istiller said
      2. Does UnifAce allways close unused Handles. Or will there be garbage after a while?

    > When an instance is deleted then the USER handles used by that instance will automatically be deleted.

    istiller said
      3. Is there a proper way to check the number of USERHandles within UnifAce?
          I did find a way under Windows 7 (by some windows API), but under XP or Server 200x, you got not the open handles by application but by windows session.

    > The Windows User32 GetGuiResources function (http://msdn.microsoft.com/en-us/library/windows/desktop/ms683192%28v=vs.85%29.aspx) should work on all the Windows versions supported by Uniface 9.6 (including Windows XP and Server 2003). And it should return the number of USER handles used by the (Uniface) process - at least when the handle of the current Uniface process is passed to the function that can be retrieved by using the Kernel32 function GetCurrentProcess (http://msdn.microsoft.com/en-us/library/windows/desktop/ms683179%28v=vs.85%29.aspx). Hope this helps. Daniel


    Author: diseli (daniel.iseli@uniface.com)