I'm currently writing a web server, but I've noticed as soon as I get a connection the space required by my server increases dramatically, along with its processing time.

When the server starts it uses about 2mb (I get this info from taskmanager), and 0-1% processing time. After a connection (even after one has been handled) its exectution time goes up to about 99% and up to 15mb. Subsequent connections after that dont have any further increase.

When a connection is made, the server makes a call to CreateThread(), which looks like this:
Code:
                    DWORD dwThreadId;														// Info for the thead 
	    HANDLE hThread; 

	    // Create a structure of type ARGUMENT to be passed to the new thread
	    ARGUMENT Argument;
	    Argument.CLA = ClientAddress;
	    Argument.SFD = SFD_New;

		// CreateThread and process the request
	    hThread = CreateThread( 
               NULL,																// default security attributes 
             0,                           										    // use default stack size  
                ProcessRequest,                 									// thread function 
                &Argument,                											// argument to thread function 
                0,                           										// use default creation flags 
                &dwThreadId
        );                												            // returns the thread identifier 
		
	    if (hThread != NULL)												        // If the thread was created, destroy it
	    {			    
            CloseHandle( hThread );
	    }
The function started by the thread looks like this:
Code:
DWORD WINAPI ProcessRequest(LPVOID lpParam )
{
	ARGUMENT * Arg = (ARGUMENT *)lpParam;											// Split the paramater into the arguments
	
	CONNECTION * New = new CONNECTION(Arg->SFD, Arg->CLA);
	if (New)
	{
		New->ReadRequest();															// Read in the request
		New->HandleRequest();														// Handle the request

		delete New;
        TestLog("Connection handled!\n");                                           // Destroy the connection
	}
	closesocket(Arg->SFD);
	return 0;
}
After a connection the server still logs the string "Connection Handled!" (the call to TestLog).
You'll see that I create a new instance of CONNECTION. I also delete it after the connection has finished processing, and because the Connection Handled string was printed, it should have been deleted.

Is it obvious where I could be having problems? Why does it take up so much processing time all of a sudden? Is there a way in windows of checking how many threads a current application is using? I have a feeling it might be creating threads and not deleting them after perhaps.