Yield return - foreach / List (ou autre solution)

Résolu/Fermé
Utilisateur anonyme - 15 avril 2013 à 14:50
 Utilisateur anonyme - 15 avril 2013 à 16:23
Salut à tous !

J'ai un "problème" ... enfin c'est plutot que je cherche la meilleur solution :
J'ai une list de string qui se rempli dynamiquement en fonction des résultats d'une requête, et le truc c'est que certaines tables possèdent beaucoup de résultats (de l'ordre de 2/300 millions). Donc mon soucis est que lorsque je rempli ma liste, je fini par avoir mon exception (il me semble que c'est dans les 6.5M d'enregistrement).
Bon pas de soucis je mets mes résultats dans un fichier temporaire.

La question se pose au niveau du renvoi des résultats. Avant je renvoyais la liste (pas m'embêter) avec un petit "foreach" pour l'encadrer, mais dans le cas où j'ai un grand nombre de résultats, je voudrais que ca soit transparent (pour déterminer si oui ou non je dois récupérer dans un fichier ca va).

DONC ma question est concernant le "yield return" : si j'utilise un compteur global, et que je fais :

string fonction_qui_renvoi()
{
   compteur++;
   yield return maListe[compteur];
}


et que je fais

foreach(string s in fonction_qui_renvoi() )
{
...
}


est-ce une bonne solution ? Ou alors avez vous d'autres idées ?


merci d'avance.
naga

PS : si je m'exprime mal demandez moi !
A voir également:

2 réponses

Utilisateur anonyme
15 avril 2013 à 15:30
Pour les intéresses : ca passera du moment que le yield est dans une boucle fini. Je posterai la fonction quand je l'aurai faite =)
0
Utilisateur anonyme
15 avril 2013 à 16:23
if (iResultInFic > 0)//--si des résultats sont stockés dans des fichiers
            {
                for (int i = 1; i <= iResultInFic; i++)//--pour chaque fichier de résultats
                {
                    using (StreamReader sr = new StreamReader(@"c:\tmpSql_" + iResultInFic.ToString() + ".dump"))
                    {
                        while (sr.Peek() >= 0)
                            yield return sr.ReadLine();
                    }
                }
            }     
 foreach (string s in lastResult)//résultats stocké dans ma liste
                yield return s;


ceux que ca intéresse devraient comprendre, sinon n'hésitez pas pour les questions.

PS : si meilleur idée je suis preneur =)
PS2 : les résultats sont supprimés lors d'une nouvelle requête (fichier ou liste)
0