Από προεπιλογή, το μέγιστο μέγεθος στοίβας του νήματος που δημιουργείται σε μια τοπική διεργασία IIS είναι 256 KB

Ισχύει για: Internet Information Services 8.0

Σύνοψη


Από προεπιλογή, το μέγιστο μέγεθος στοίβας του νήματος που έχει δημιουργηθεί από μια τοπική διαδικασία Microsoft Internet Information Services (IIS) είναι 256 KB πριν από τον Windows Server 2008. Για παράδειγμα, όταν Inetinfo.exe, DLLHost.exe ή W3wp.exe δημιουργεί ένα νήμα στο IIS 5.0 ή IIS 6.0, το μέγιστο μέγεθος στοίβας του νήματος είναι 256 KB από προεπιλογή. Επίσης ρητά, μπορείτε να καλέσετε τη συνάρτηση CreateThread για να καθορίσετε το μέγεθος της στοίβας του νήματος. Στα Microsoft Windows 2000, εάν η διαδικασία εργασίας ASP.NET (ASPNet_wp.exe) Microsoft δημιουργεί ένα νήμα, το μέγιστο μέγεθος στοίβας του νήματος είναι 1 MB. Στον Windows Server 2008 και νεότερη έκδοση, το μέγιστο μέγεθος στοίβας από ένα νήμα που εκτελείται σε έκδοση 32-bit του IIS είναι 256 KB και σε μια x64 διακομιστή είναι 512 KB.

ΣΗΜΕΊΩΣΗ: Υπηρεσίες Internet Information Services είναι μια πλατφόρμα εφαρμογών πολλαπλών νημάτων web που επιτρέπει την εφαρμογή κώδικα που εκτελείται μέσα από κάθε διεργασία της εργασίας να χρησιμοποιούν εκατοντάδες ή περισσότερα νήματα ταυτόχρονα ανάλογα με τις ανάγκες. Κάθε νήμα δεσμεύεται από το ίδιο όριο μέγεθος στοίβας για να διατηρήσετε τη χρήση της εικονικής μνήμης της διαδικασίας διαχείρισης περιοριστικός.

Περισσότερες πληροφορίες


Το μέγιστο μέγεθος στοίβας του νήματος δεν καθορίζεται από ένα μεμονωμένο στοιχείο ISAPI, DLL ή ASP που εκτελείται μέσα από τη διαδικασία. Το μέγιστο μέγεθος στοίβας του νήματος έχει ρυθμιστεί από το εκτελέσιμο αρχείο της διαδικασίας. Εάν έχετε μια στοίβα μεγάλο μέγεθος, μπορείτε να δημιουργήσετε μέσω προγραμματισμού ένα νήμα και στη συνέχεια ορίστε το μέγεθος στοίβας κατάλληλα. Εναλλακτικά, εάν το νήμα που εκτελείται από το μέγιστο μέγεθος στοίβας, πρέπει να αλλάξετε τον κωδικό στην εφαρμογή να χρησιμοποιήσει σωστά τη στοίβα.

Τα ορίσματα και τοπικές μεταβλητές μιας συνάρτησης αποθηκεύονται στη στοίβα του νήματος. Εάν δηλώσετε μια τοπική μεταβλητή που έχει μια πολύ μεγάλη τιμή, η στοίβα γρήγορα εξαντληθεί. Για παράδειγμα, η συνάρτηση στο παρακάτω παράδειγμα κώδικα απαιτεί 400.000 byte σε στοίβα για να αποθηκεύσετε τον πίνακα.
void func(void)   {
int i[100000];
// Use 100,000 integers multiplied by 4 bytes per integer to store the array.
return;
}

Σημείωση Δεν μπορείτε να καλέσετε αυτήν τη συνάρτηση, στον IIS 4.0, στις υπηρεσίες IIS 5.0, στις υπηρεσίες IIS 5.1 ή στις IIS 6.0.

Για να αποφύγετε τη χρήση της στοίβας, δυναμικά να εκχωρήσει τη μνήμη. Για παράδειγμα, η συνάρτηση στο παρακάτω παράδειγμα κώδικα εκχωρεί δυναμικά τη μνήμη.
void func(void)   {
int *i

i = new int[100000];
// More code goes here.
return;
}

Σημείωση Σε αυτό το παράδειγμα κώδικα, η μνήμη αποθηκεύονται στο σωρό αντί για τη στοίβα. Επομένως, η λειτουργία δεν απαιτεί 400.000 byte σε στοίβα για να αποθηκεύσετε τον πίνακα.

Εάν μια συνάρτηση καλείται αναδρομικά, στοίβα ενδέχεται να εξαντληθεί γρήγορα. Για παράδειγμα, μια συνάρτηση απαιτεί 400.000 byte σε στοίβα, εάν ισχύουν οι ακόλουθες συνθήκες:
  • Η συνάρτηση απαιτεί 40 byte για μια τοπική μεταβλητή.
  • Η συνάρτηση είναι αναδρομικά που ονομάζεται 10.000 φορές.
Σε μια εφαρμογή Common Gateway Interface (CGI), ένα νήμα δεν έχει ένα μέγιστο μέγεθος στοίβας των 256 KB. Όταν ξεκινάτε την εφαρμογή CGI, δημιουργείται μια νέα διαδικασία και τα εκτελέσιμα αρχεία CGI, ρυθμίστε το μέγεθος στοίβας. Επίσης ρητά, μπορείτε να καλέσετε τη συνάρτηση CreateThread για να καθορίσετε το μέγεθος της στοίβας του νήματος.

Για περισσότερες πληροφορίες, επισκεφθείτε την ακόλουθη τοποθεσία MSDN στο Web: