[comp.windows.ms.programmer] Out of Resources in Windows3? Summary, long

indra@brahms.amd.com (Indra Singhal) (05/06/91)

I must thank:

From: dorsai@iear.arts.rpi.edu (gregory d moncreaff)
From: mmshah@athena.mit.edu (Milan M Shah)
From: grantk@manta.NOSC.MIL (Kelly J. Grant)
From: hamilton@nwnexus.WA.COM (Dick Hamilton)
From: Joel Spolsky <spolsky-joel@CS.YALE.EDU>
From: Vesa Komulainen <KTK-VK%finou.oulu.fi@SEARN.SUNET.SE>

for either replying or posting on the subject. In order to keep this
posting as brief as possible, I am not including all their postings
again! Just the facts...

Learnt from you folks that something called 'handles' was the real
resource that Progman/Help/About reports, that these beasts are limited
to 8,192 pieces... that they could run out much before real memory, as
it happened in my case.

I did a test, results follow, I systematically opened up applications
within windows and looked at the Resource figure upon opening and
subsequent closing of the application to get a feel for the resource use
and how well each application returned the resource. Note: the only
tool that measures this, is Progman/Help/About and the accuracy is
rounded to the nearest digit with no real units just %. [Any takers for
a better tool?]

Following the raw numbers, I will have conclusions I drew and a word
about what I got from Microsoft Tech Support on this issue.

Application:		Start	End	Used		Comments

Program Mgr			86	14		All groups closed.
  + 4 icon group	85	85	1
  + 9 icon group	81	81	4
  +11 icon group	78	78	3
  +10 icon group	75	75	3
  +20 icon group	70	70	5
  + 4 icon group	68	68	2		No Resource returned.

Subsequent tests started at this level:

hDC MicroApps with/					(*)StLine is not a uApp.
  System Enhancer	55	59	4		It was in my Wkset so I
  Work Sets			62	3		Let it be.
  Straight Line(*)		64	2
  Close Micro Apps		67	3

I beleive hDC uApps Mgr returns resources... 68-67% could be due to rounding
errors. After uApps Mgr started I began closing each uApp and checking the
Resource until I closed them all. Other uApps checked follow:

hDC uApps (as above)	55
  +Disk Viewer		52	55	3
  +Memory Viewer	54	55	1
  +Font Viewer		54	54	1
  +Desktop		52	54	1 		1 lost somewhere
  Close hDC & stline		67

Restart hDC as above	55
  +Memory Viewer	54
   (Inc. Discardable
    Memory)		54	55	1		This did not reclaim
							any resource as was
							suggested in a response.
  Close hDC & Stline		67

BeckerTools 		32	65	35		2% lost
  again			32	67	33		2% returned
  again			31	65	34		2% lost again
  again			31	65	34		2% lost for good?
							I don't keep it open
							anymore!
4Dos Shell		63	65	2
Command Com		63	65	2
ATM Control Panel	62	65	3
CorelDRAW 2.0		59	65	6		No Data file
PowerPoint 2.0		49	65	16		No Data file
Word 4 Windows 1.1	54	65	11		No Data file
Ventura 3.0 4 windows	62	63	3		2% lost (no data file)
  Again			--	63	-		Sys div/0 error
  Again			60	62	3		2 page document +1 lost
  Again			--	62	-		Sys div/0 error (nodoc)

Excel 3.0		47	62	15		No data file
Microphone II 1.01	55	62	12		No connection

Conclusions: [Mine and mine alone, my employer doesn't pay me for this, and
	      all testing was done on personal time]
	
	Becker Tools and Ventura need to have their code reviewed by those
	who know Windows programming better. So does the code for Program
	Manager. 

	There are no tools out there that measure the restricting resource.
	Watching memory is of little use when bottleneck is elsewhere.

Microsoft Tech support outcome:
	1st required me to get rid of 386Max, PC Tools' cache & ram disk,
	then asked to have files=40 up'd to 100, buffers=5 up'd to 10, use
	himem.sys, smartdrv and ramdrive.

	I did all that it made no change. By then I knew it was futile, thanks
	to you all! Now I will go back and tell them!

Flames > /dev/null. Constructive comments: please e-mail. Hope this exercise
of mine is useful to some of you!

--
iNDRA | indra@amd.com or {ames apple uunet}!amd!indra
      | (Indra Singhal) (408) 749-5445; Advanced Micro Devices
      | MS 167; Box 3453; 901, Thompson Pl., Sunnyvale, CA 94088

Thomas_Hornschuh@p1.f36.n245.z2.fidonet.org (Thomas Hornschuh) (05/07/91)

IS> 
IS> Learnt from you folks that something called 'handles' was the real
IS> resource that Progman/Help/About reports, that these beasts are limited
IS> to 8,192 pieces... that they could run out much before real memory, as
IS> it happened in my case.

The magic 8192 is the number of global handles, which are references to the 
global memory objects an application allocates. This is a hardware limitation, 
because 8192 is the maximal number of descriptors in al local descriptor table 
(LDT) of the 286 and higher Intel processors in protected mode.
But I think that this number isn't the reference for the resource display of 
the progman.
Mircosofts writes an the file "tips.txt" supplied with the SDK:

------------------------------------
1.8  Limitations on System Resources
------------------------------------


1.8.1   Limitation on number of Windows in system

There is a limit to the number of windows that can be
created system-wide. Each window creates a window structure
that is allocated out of USER's heap, a data segment, which
is limited to 64K. This is the limitation. Since there are a
number of items that effect the USER's heap, there is no way
to determine how much space will be around at any given
time.  You can use Heap Walker to check the size of USER's
data segment.


1.8.2   Menus and their effect on system resources

Menus are stored in USER's heap and they have a large effect
on system resources available. If an application loads a
menu and doesn't associate it with a window, it must destroy
the menu itself. (Menus used with the TrackPopupMenu
function won't automatically be freed when the application
exits.)


1.8.3   Calculating Free System Resources

The Free System Resources figure in Program Manager's About
dialog box is calculated as follows:

The calculation is the same for all modes (although not done
for real mode).

% free = min (% free of USER's heap, % free of GDI's heap)

                           (Max heap size - heap used) 
% free USER or GDI heap =  --------------------------- * 100
                                  Max heap size

The maximum heap size is 64K less the sum of the size of the 
static variables and the stack.

There is no external API defined to calculate these values.


In short words:
There are 2 memory blocks of 64K each, the USER and the GDI heap. If either of 
these heaps is completly eat up, the free system resources are 0 %. Every 
window (technically each Button, Scrollbar, Checkbox, etc. is at least one 
window), every Icon consumes some of this space. How much, depends on the 
design of an application. If an application would create all dialogboxes at 
beginning, and only show and hide them, it would be use much of the resources. 
Applications that creates only windows of the currently open dialogboxes and 
destroy them immedatly after closing the dialog consumes less memory, but would 
be slower. 

keithp@nwnexus.WA.COM (Keith Pleas) (05/09/91)

In article <1991May6.075011.14338@amd.com> indra@brahms.amd.com (Indra Singhal) writes:
>Note: the only
>tool that measures this, is Progman/Help/About and the accuracy is
>rounded to the nearest digit with no real units just %. [Any takers for
>a better tool?]

Well, the HEAPWALKER utility that comes with the MS Windows SDK will let
you explore this in greater detail.  FWIW, my understanding is that
Systems Resources is equal to the 64K segment set aside for the global
heap.  I also understand that this relatively small limit will be greatly
increased with Windows 3.1.  I looked into a specific situation where
system resources seemded to disappear when Shelling out to a TPW generated
program from WFW.  I found that the application destroyed itself, but left
some heap memory unrecovered in the User segment.  Also, I am running ATM,
which will increase in size to accomodate additional fonts; some of this
memory is not reclaimed when the application terminates.