Il y a une tâche très simple que je veux faire, qui fait en quelque sorte planter le programme.StackOverflowException avec de grandes listes
J'ai une liste de nombre contenu à l'intérieur, tous uniques. Passé un certain nombre, je veux inverser la commande.
Exemple: 5, 16, 11, 3, 8, 4 -> 5, 16, 11, 4, 8, 3 3 lors de l'utilisation en tant que point de pivotement.
Voici une des nombreuses méthodes que j'ai essayées.
private List<int> ShiftPath(List<int> oldPath, int shift)
{
List <int> newPath = new List<int>();
int counter = 0;
// Start reordering
// Forwards
while (oldPath[counter] != shift)
{
newPath.Add(oldPath[counter]);
counter++;
}
// Backwards
counter = oldPath.Count - 1;
while (oldPath[counter] != shift)
{
newPath.Add(oldPath[counter]);
counter--;
}
// New endpoint
newPath.Add(shift);
// Update
return newPath;
}
Maintenant, cela fonctionne. Ce n'est peut-être pas la solution optimale, mais cela fonctionne. J'utilise cette méthode depuis un certain temps, mais maintenant j'ai atteint un point où le nombre d'éléments dans la liste devient extrêmement important (plus de 6000). Finalement, je reçois une exception StackOverFlowException lorsque j'essaie d'ajouter quelque chose à newPath.
Je suis sûr à 100% qu'il n'y a pas de boucle infinie comme les revendications VS. J'ai essayé d'autres méthodes telles que l'obtention directe de la gamme d'éléments, les boucles for et foreach au lieu de while, toutes finissent par tomber en panne. Il semble que la quantité de données est juste trop grande. Et ça va juste grossir (jusqu'à 20 000).
Preuve: même cela fera le programme lancer une exception: (?) Liste <int> Newpath = nouvelle liste <int> (OldPath);
Une idée de ce qui est à l'origine de ceci/comment le réparer?
-Depuis un débutant.
Remarque: L'utilisation de la structure de données de la pile. –