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

In diesem Artikel wird die standardmäßige maximale Stapelgröße eines Threads vorgestellt, der von einem nativen Microsoft-Internetinformationsdienste -Prozess (IIS) 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 nativen IIS-Prozess erstellt wird, 256 KB vor Windows Server 2008. 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 auch explizit die CreateThread-Funktion aufrufen, um die Stapelgröße des Threads anzugeben. Wenn in Microsoft Windows 2000 der Microsoft ASP.NET Workerprozess (ASPNet_wp.exe) 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 einer 32-Bit-Version von IIS ausgeführt wird, 256 KB und auf einem x64-Server 512 KB.

Hinweis

Internetinformationsdienste sind eine Multithread-Webanwendungsplattform, mit der Anwendungscode, der in jedem Arbeitsprozess ausgeführt wird, bei Bedarf Hunderte oder mehr Threads gleichzeitig verwenden kann. Jeder Thread ist an dasselbe Stapelgrößenlimit gebunden, um die virtuelle Speicherauslastung des Prozesses innerhalb verwaltbarer Grenzwerte zu halten.

Weitere Informationen

Die maximale Stapelgröße eines Threads wird nicht durch eine einzelne ISAPI, DLL oder ASP-Komponente bestimmt, die innerhalb des Prozesses ausgeführt wird. Die maximale Stapelgröße eines Threads wird durch die ausführbare 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 nicht mehr die maximale Stapelgröße aufweist, 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 erschöpft. Beispielsweise erfordert 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, weisen Sie den Speicher dynamisch zu. Beispielsweise ordnet die Funktion im folgenden Codebeispiel den Arbeitsspeicher dynamisch zu.

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

Hinweis

In diesem Codebeispiel wird der Arbeitsspeicher im Heap statt im Stapel gespeichert. Daher benötigt die Funktion keine 400.000 Bytes im Stapel, um das Array zu speichern.

Wenn eine Funktion rekursiv aufgerufen wird, ist der Stapel möglicherweise schnell erschöpft. 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 CGI-Anwendung (Common Gateway Interface) hat ein Thread keine 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 auch explizit die CreateThread-Funktion aufrufen, um die Stapelgröße des Threads anzugeben.

Weitere Informationen finden Sie unter Threadstapelgröße.