Site menu:



Home > TechFiles


Windows 9.x System Resources

A HelpWithWindows TechFile

By: Arie Slob

Windows Resource Meter


There are many people asking us "Hey, I have 128MB of RAM, but I keep getting a warning that more than 90% of my system resources are in use. What gives?"

Windows Memory & Resources are two entirely different things. Main memory or RAM (Random Access Memory) refers to physical memory that is internal to the computer.

System resources are areas of memory that are used by the input manager (USER.EXE) and the graphic display interface manager (GDI.EXE) for keeping track of all of the windows that are open in a session and for drawing objects on the screen. Owing to their fundamental nature, the performance of these programs has been improved by limiting their data to a single 64Kb segment of DOS memory (the Intel processors can access data from a 64Kb segment much faster than from a wider area). If either of these segments becomes full, programs may fail to load and Windows may become unstable - regardless of how much other free memory there is.

Each application that is loaded, and each window and child-window that is open, consumes system resources. Typically an application consumes 2-8% of system resources, and each child-window consumes 1-2%. Certain programs (eg Print Manager and some TCP/IP communication programs are particularly bad culprits) are much more greedy for system resources than this. Closing an application should release its allocated system resources, but some software is not as well behaved as it should be and this release may not happen. If the free resources fall below about 10-15%, serious problems may be encountered and Windows should be restarted as soon as possible. These problems are somewhat less severe than they used to be because Windows 9.x manages system resources more intelligently than 3.x But it is still a very common cause of memory error messages and program crashes.

The state of the system resources can be monitored using Windows Resource Meter (C:\Windows\rsrcmtr.exe). The figure given as system resources is the percentage free of whichever of the two areas is lower. Windows Resource Meter can be accessed from the Start Menu under Programs\Accessories or System Tools. It will run with a little icon in your system tray and show you resources/memory in little bars of green. When it gets down to the bottom, it's time to be careful.

Resource Meter in system tray

If you call the utility up from the tray it looks like this:

Windows Resource Meter - full window

You can also place a shortcut to Windows Resource Meter in your startup group to have it run whenever you start your computer. This is not a bad idea as it can help you keep an eye on your systems resources and memory and help prevent crashes when either one gets too low. Bear in mind that that running this utility does use a small amount of resources itself. There are other third party utilities around which do the job and use less memory. Once worth trying is the little freeware TClockEx which not only improves on the windows clock but also monitors your memory and resources for you.


A Technical Look at Windows 9.x Resources:

The windows API (Application Programming Interface) is contained in a few DLLs. The most important are Kernel (functions for managing memory, processes and threads), User (functions for user interface such as window creation and messages), GDI (functions for drawing graphical images and displaying text).

Windows has five separate "heaps" (areas of memory) for USER and GDI to store things.

USER has a 16 bit heap and two 32 bit heaps. One of these 32 bit heaps stores WND (window) structures. There is a WND for every window in the system. The structure holds important info about the window. The other 32 bit heap stores menus. The 16 bit heap stores things like window classes, message queues etc.

The User component also manages input from the keyboard, mouse, and other input devices. It also manages interaction with the sound driver, timer, and communications ports. Windows 98 uses an asynchronous input model for all input to the system and applications. As the various input devices generate interrupts, the interrupt handler converts these interrupts to messages and sends the messages to a raw input thread area, which in turn passes each message to the appropriate message queue. Although each Win32-based thread can have its own message queue, all Win16-based applications share a common one.

GDI has a 16 bit heap and a 32 bit heap. GDI uses its heaps to store fonts, brushes, fonts, palettes, bitmaps and pens (graphical stuff).

The GDI is the graphical system that manages what appears on the screen. It also provides graphics support for printers and other output devices. It draws graphic primitives, manipulates bitmaps, and interacts with device-independent graphics drivers, including those for display and printer output device drivers.

"Free resources" are just the amount of memory left in the GDI and USER system heaps.

Windows 9.x incorporates the Windows 64KB system-resource limit for better performance when it is providing backward compatibility.

Resource limits in Windows 3.x / 9.x / NT


Resource

Windows 3.x

Windows 9.x

Windows NT

Window/Menu Handles

about 200

32KB (each)

Unlimited

Timers

32

Unlimited

Unlimited

COM/LPT ports

4 each

Unlimited

Unlimited

Listbox items (per listbox)

8KB

32KB

Unlimited

Listbox data (per listbox)

64KB

Unlimited

Unlimited

Edit control data (per control)

64KB

Unlimited

Unlimited

Regions

All in 64KB segment

Unlimited

Unlimited

Logical pens, brushes

All in 64KB segment

64KB segment

Unlimited

Physical pens, brushes

All in 64KB segment

Unlimited

Unlimited

Logical fonts

All in 64KB segment

750-800

Unlimited

Installed fonts

250-300 (best case)

1000

Unlimited

Device Contexts

200 (best case)

16KB

Unlimited


The table is only an approximation. It is difficult to list exact limits for GDI objects in Windows 3.x, since all regions, physical objects, logical objects, DCs, and installed fonts have to fit in a single 64KB segment. Moving these into the 32-bit heap in Windows 9.x provides more room for the remaining (small) items such as logical pens and brushes. The remaining items in the Windows 9.x local heap are all less than 10-20 bytes each.

Note: The limits in Windows NT are for Win32-based applications. In many cases, there are 32KB or 64KB limits on most of these resources for 16-bit Windows-based applications due to limits on the size of the 16-bit Windows-based application handles.


Q & A

My Resources sometimes drop below 50%. What's wrong? Should I worry?

This is not a problem at all. You can easily have resources drop to 15-20% without a problem. When Resources get below the 15% range, it is time to think about shutting down some programs.

Also note that if you are running 16-bit code, the resources allocated to 16-bit operation are only released when you shut down the last 16-bit application.

Can I increase my systems resources by adding more RAM?

You cannot increase resources by adding RAM, because the size of the two categories (USER & GDI) of resources is a fixed memory segment.


Related Microsoft Knowledge Base Articles