Mitch a raison. Cela dépend des ressources (mémoire).
Bien que l'article de Raymond soit dédié aux threads Windows, et non aux threads C#, la logique s'applique de la même manière (les threads C# sont mappés sur les threads Windows).
Cependant, comme nous sommes en C#, si nous voulons être totalement précis, nous devons distinguer entre les threads "démarrés" et "non démarrés". Seuls les threads démarrés réservent effectivement de l'espace de pile (comme on pourrait s'y attendre). Les threads non démarrés n'allouent que les informations requises par un objet thread (vous pouvez utiliser reflector si vous êtes intéressé par les membres réels).
Vous pouvez réellement le tester vous-même, comparez :
static void DummyCall()
{
Thread.Sleep(1000000000);
}
static void Main(string[] args)
{
int count = 0;
var threadList = new List();
try
{
while (true)
{
Thread newThread = new Thread(new ThreadStart(DummyCall), 1024);
newThread.Start();
threadList.Add(newThread);
count++;
}
}
catch (Exception ex)
{
}
}
avec :
static void DummyCall()
{
Thread.Sleep(1000000000);
}
static void Main(string[] args)
{
int count = 0;
var threadList = new List();
try
{
while (true)
{
Thread newThread = new Thread(new ThreadStart(DummyCall), 1024);
threadList.Add(newThread);
count++;
}
}
catch (Exception ex)
{
}
}
Mettez un point d'arrêt dans l'exception (hors mémoire, bien sûr) dans VS pour voir la valeur du compteur. Il y a bien sûr une différence très significative.
0 votes
La réponse sera différente si vous utilisez la machine virtuelle x64 ou la machine virtuelle x86
0 votes
Dans ma situation, c'est x86, mais pouvez-vous fournir la réponse pour les deux au cas où quelqu'un d'autre en aurait besoin ?
0 votes
Je manque d'une réponse à la question de ce qui se passe lorsque la limite est atteinte. L'application va-t-elle planter ou les threads resteront-ils dans la file d'attente?