none
StreamWriter et ArrayList (ecrire toute la collection sans la parcourir) ? RRS feed

  • Question

  • Bonjour a tous

    J'ai fait des recherches mais je n'ai pas encore trouvé ce que je voulais

    Voila j'ai mis dans une collection ArrayList pres de deux cent milles lignes (items) et je souhaiterais toutes les écrire dans un fichier mais sans les parcourir avant (sans faire de boucle)

    Est-il possible de faire, peut etre avec un autre type de collection, d'écrire dans un fichier l'ensemble d'une collection sans faire de boucle ?

    Actuellement je parcours dans une boucle "for i" les deux cent milles item de la collection pour les écrires dans le fichier, cela prend beaucoup trop de temps

    Merci


    Cordialement,

    jeudi 11 avril 2013 19:24
    Auteur de réponse

Réponses

  •  

    Je me réponds a moi même pour les autres qui en auraient besoin par la suite.

    C'est balo, c'est bien souvent le cas quand on demande de l'aide qu'on fini par trouver ;)

    oListFiles est de type List(Of String)

    File.WriteAllLines("C:\temp\chose.txt", oListFiles.ToArray)

    +


    Cordialement,

    • Marqué comme réponse TroxsaEditor jeudi 11 avril 2013 22:07
    jeudi 11 avril 2013 22:07
    Auteur de réponse

Toutes les réponses

  •  

    Je me réponds a moi même pour les autres qui en auraient besoin par la suite.

    C'est balo, c'est bien souvent le cas quand on demande de l'aide qu'on fini par trouver ;)

    oListFiles est de type List(Of String)

    File.WriteAllLines("C:\temp\chose.txt", oListFiles.ToArray)

    +


    Cordialement,

    • Marqué comme réponse TroxsaEditor jeudi 11 avril 2013 22:07
    jeudi 11 avril 2013 22:07
    Auteur de réponse
  • Bonjour,

    Pour écrire tout le contenu de votre liste, il y aura forcément une boucle à faire (soit par vous soit par une méthode Microsoft).

    Vous utilisez une List de String, vous pouvez donc la passer en paramètre car la méthode WriteAllLines() prend un paramètre de type IEnumerable<T> et il est inutile de la convertir en tableau.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    jeudi 11 avril 2013 22:39
    Modérateur
  • J'ajouterais que le WriteAllLines parcours en interne le IEnumerable donc, si c'est pas vous qui parcourrez la collection, c'est quelqu'un d'autre qui le fait pour vous ;-)

    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    vendredi 12 avril 2013 08:11
  • Bonjour,

    Merci pour vos informations

    j'avais essayé de convertir mon ArrayList en IEnumrable mais sans réussite.

    J'aimerais comprendre pourquoi cela va beaucoup plus vite a écrire un fichier en utilisant le WriteAllLines que le StreamWrite (WriteLine) ?


    Cordialement,

    samedi 13 avril 2013 07:52
    Auteur de réponse
  • Bonjour,

    La méthode WriteAllLines() utilise elle aussi un StreamWriter.
    Sur quoi vous vous basez pour mesurer les performances de votre algorithme ?

    La classe ArrayList n'est pas du tout performante et n'est plus utilisée depuis le .NET framework 2.0. Préférez l'utilisation de la liste générique List(Of T) qui permet de typer votre code. 

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    samedi 13 avril 2013 09:30
    Modérateur
  • Bonjour Gilles,

    J'ai fait des petits essayes et effectivement cela ne prend pas plus de temps de l'un ou l'autre.

    L'erreur est que j'avais toujours une Console.WriteLine et le fait d'avoir l'information dans la console cela ralenti l’exécution d'écriture.

    Avec la console.writeline le temps est de : +51 minutes (et j'ai stoppé avant)
    Sans la consoleWriteline le temps est de : -1 secondes

    Je teste sur une machine ou la configuration n'est pas du tout la même, je testerais au boulot.

    Merci pour votre aide.


    Cordialement,

    samedi 13 avril 2013 18:43
    Auteur de réponse