Die standardmäßige maximale Stapelgröße von Threads, die in einem systemeigenen IIS-Prozess erstellt werden, beträgt 256 KB.

In diesem Artikel wird die standardmäßige maximale Stapelgröße eines Threads vorgestellt, der von einem systemeigenen Microsoft-Internetinformationsdienste (IIS)-Prozess erstellt wird.

Ursprüngliche Produktversion:   Internetinformationsdienste 8.0
Ursprüngliche KB-Nummer:   932909

Zusammenfassung

Standardmäßig beträgt die maximale Stapelgröße eines Threads, der von einem systemeigenen IIS-Prozess erstellt wird, vor Windows Server 2008 256 KB. Wenn beispielsweise Inetinfo.exe, DLLHost.exe oder W3wp.exe einen Thread in IIS 5.0 oder IIS 6.0 erstellt, beträgt die maximale Stapelgröße des Threads standardmäßig 256 KB. Sie können die CreateThread-Funktion auch explizit aufrufen, um die Stapelgröße des Threads anzugeben. Wenn der Microsoft ASP.NET Arbeitsprozess (ASPNet_wp.exe) in Microsoft Windows 2000 einen Thread erstellt, beträgt die maximale Stapelgröße des Threads 1 MB. In Windows Server 2008 und höher beträgt die maximale Stapelgröße eines Threads, der auf der 32-Bit-Version von IIS ausgeführt wird, 256 KB und auf einem x64-Server 512 KB.

Hinweis

Internetinformationsdienste ist eine Multithread-Webanwendungsplattform, mit der Anwendungscode, der innerhalb jedes Arbeitsprozesses ausgeführt wird, bei Bedarf Hunderte oder mehr Threads gleichzeitig nutzen kann. Jeder Thread ist an den gleichen Grenzwert für die Stapelgröße gebunden, um die Nutzung des virtuellen Speichers des Prozesses innerhalb der verwaltbaren Grenzen zu halten.

Weitere Informationen

Die maximale Stapelgröße eines Threads wird nicht von einer einzelnen ISAPI-, DLL- oder ASP-Komponente bestimmt, die innerhalb des Prozesses ausgeführt wird. Die maximale Stapelgröße eines Threads wird von der ausführbaren Datei des Prozesses konfiguriert. Wenn Sie über eine große Stapelgröße verfügen müssen, können Sie programmgesteuert einen Thread erstellen und dann die entsprechende Stapelgröße festlegen. Wenn der Thread die maximale Stapelgröße nicht übersteigt, müssen Sie alternativ den Code in der Anwendung ändern, um den Stapel ordnungsgemäß zu verwenden.

Die Argumente und die lokalen Variablen einer Funktion werden im Stapel des Threads gespeichert. Wenn Sie eine lokale Variable deklarieren, die einen großen Wert aufweist, ist der Stapel schnell aufgebraucht. Beispielsweise benötigt die Funktion im folgenden Codebeispiel 400.000 Bytes im Stapel, um das Array zu speichern.

void func(void)
{
    int i[100000];
    // Use 100,000 integers multiplied by 4 bytes per integer to store the array.
    return;
}

Hinweis

Sie können diese Funktion nicht in IIS 4.0, in IIS 5.0, in IIS 5.1 oder in IIS 6.0 aufrufen.

Um die Verwendung des Stapels zu vermeiden, ordnen Sie den Speicher dynamisch zu. Beispielsweise weist die Funktion im folgenden Codebeispiel den Speicher dynamisch zu.

void func(void)
{
    int *i
    
    i = new int[100000];
    // More code goes here.
    return;
}

Hinweis

In diesem Codebeispiel wird der Speicher im Heap anstelle des Stapels gespeichert. Daher benötigt die Funktion nicht 400.000 Bytes im Stapel, um das Array zu speichern.

Wenn eine Funktion rekursiv aufgerufen wird, kann der Stapel schnell aufgebraucht sein. Beispielsweise erfordert eine Funktion 400.000 Bytes im Stapel, wenn die folgenden Bedingungen erfüllt sind:

  • Die Funktion erfordert 40 Bytes für eine lokale Variable.
  • Die Funktion wird 10.000 Mal rekursiv aufgerufen.

In einer Common Gateway Interface (CGI)-Anwendung verfügt ein Thread nicht über eine maximale Stapelgröße von 256 KB. Wenn Sie die CGI-Anwendung starten, wird ein neuer Prozess erstellt, und die ausführbaren CGI-Dateien konfigurieren die Stapelgröße. Sie können die CreateThread-Funktion auch explizit aufrufen, um die Stapelgröße des Threads anzugeben.

Weitere Informationen finden Sie unter Threadstapelgröße.