Windows maintains a cache of display DCs that it uses for common, parent, and window DCs. Windows retrieves a DC from the cache whenever an application calls the GetDC or BeginPaint function; Windows returns the DC to the cache when the application subsequently calls the ReleaseDC or EndPaint function.
In Windows 3.x, the cache contains five display DCs, but only five DCs from the cache can be active at a time. To ensure that other applications have access to these DCs, an application must release a device context immediately after using it. Failure to do so eventually causes the application to fail.
There is no predetermined limit on the amount of DCs that a cache can hold; Windows creates a new display DC for the cache if none is available. Given this, a Win32-based application can have more than five active DCs from the cache at a time. However, the application must continue to release these DCs after use. Because new display DCs for the cache are allocated in the application's heap space, failing to release the DCs eventually consumes all available heap space. Windows indicates this failure by returning an error when it cannot allocate space for the new DC. Other functions unrelated to the cache may also return errors.
Portability To minimize porting efforts, applications that use common DCs should be limited to no more than five and ensure that a common DC is released as soon as possible after it is used.