IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

lecture txt - 60000 ligne


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Portugal

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2006
    Messages : 55
    Points : 48
    Points
    48
    Par défaut lecture txt - 60000 ligne
    Salut,

    Voila, j'ai un fichier txt avec 60000 ou plus et il faut que je importe les donnés sur ma base de donnée. je utilise alors un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string[] rowstxt = System.IO.File.ReadAllLines(path);
    et après un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach( string str in rowstxt )
    avec un petit algorithme de decode de la row. le problème c'est que il me faut +/- 5min de chargement! je pense que c'est beaucoup. Il y a t'il une meilleurs solution avec plus performance?

    je vous remercie d'avance!
    Filipe Oliveira

  2. #2
    Membre éprouvé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Points : 945
    Points
    945
    Par défaut
    Essaye de voir ce qui prend du temps en faisant du pas à pas : Est ce le foreach ou le chargement ?

    Si c'est le foreach, tu pourrais gagner quelque seconde en faisant un for, mais l'efficacité n'est pas sure. Le seul truc que tu peux faire c'est des tests à plusieurs endroit dans ton code genre :

    DateTime startTime = DateTime.Now;

    // Lire le fichier

    dureeLectureFichier = (DateTime.Now - startTime).Seconds;

    // foreach

    dureeForeach = (DateTime.Now - startTime).Seconds - dureeLectureFichier;
    A la fin, tu peux les afficher. C'est pas ce qu'il y a de plus précis mais ça te donne une idée du truc. Après, tu changes le foreach par un for, tu vois si y'a une différence flagrante, etc ...
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2009
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 317
    Points : 560
    Points
    560
    Par défaut
    Pour être encore plus précis, je privilégierais plutôt Stopwatch

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Portugal

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2006
    Messages : 55
    Points : 48
    Points
    48
    Par défaut
    Salut

    c'est le foreach! la chargement du fichier ne prends que 00:00:00.048

    A chaque row du foreach le temps de calcule est de 00:00:00.003 +/-

    le temps total est de 00:02:45:120, pour 53091 rows

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2009
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 317
    Points : 560
    Points
    560
    Par défaut
    C'est surtout certainement le traitement que tu fais à chaque ligne de ton fichier qui doit, proportionnellement, prendre le plus de temps.

    Regarde si tu ne peux pas optimiser ton traitement afin de diminuer le temps de traitement de chaque ligne.

  6. #6
    Membre éprouvé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Points : 945
    Points
    945
    Par défaut
    C'est vrai que 3 ms ça a l'air d'être pas mal, regarde au niveau de ce traitement et réfléchis à une autre manière de l'implémenter.
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  7. #7
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par Aeronia Voir le message
    Pour être encore plus précis, je privilégierais plutôt Stopwatch
    Le plus précis ici n'a aucun interêt : il s'agit d'avoir les "poids" respectifs des actions.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  8. #8
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Si tu insères ligne à ligne dans la DB, tu perd déjà beaucoup de temps.

    Envisage l'utilisation d'un "bulk insert" quitte à réécrire le fichier après traitement, si le traitement est réellement nécessaire (ce qui n'est peut être pas le cas : il est possible que tes traitements soient de simples transfos pouvant être effectuées via un fichier de format).

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Portugal

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2006
    Messages : 55
    Points : 48
    Points
    48
    Par défaut
    le traitement effectué dans le foreach est relativement simple je cree un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TimeSpan timeStr = new TimeSpan(0, int.Parse(rowtxt.Substring(26, 2)),
                                                            int.Parse(rowtxt.Substring(28, 2)),
                                                            int.Parse(rowtxt.Substring(30, 2)),
                                                            int.Parse(rowtxt.Substring(32, 2), System.Globalization.NumberStyles.HexNumber));
    en suite je crée un nouveau object avec quelque attributs avec des substring aussi (je sais que le substring utilise un peut de plus de poids dans le traitement)

    après le Set des donnée je additionne ça sur une List e je utilise un insertallonsubmit (avec Linq to Sql)

  10. #10
    Membre éprouvé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Points : 945
    Points
    945
    Par défaut
    Tu fais donc une petite vingtaine d'opérations x 60000 lignes cad environ 1.2 millions de traitements. C'est ptet normal que ça prenne un certain temps non ?

    Surtout que les substring sont assez gourmands de mémoire

    Au vu de ce post -> http://www.developpez.net/forums/d95...-nombre-ligne/

    Essaye de voir du côté du StringBuilder si ça ne t'aide pas niveau perfs.
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  11. #11
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Portugal

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2006
    Messages : 55
    Points : 48
    Points
    48
    Par défaut
    Je peut alors partagé ma liste de 60000 item en 3 ou 4 List et exécute en même temps sur de nouvelle thread.

    Ça pourrai améliorer un peut le temps de traitement non?

    Ou alors exécuté en parallèle avec PLinq....

    Je sais pas trop!

  12. #12
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par olifile Voir le message
    le traitement effectué dans le foreach est relativement simple je cree un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TimeSpan timeStr = new TimeSpan(0, int.Parse(rowtxt.Substring(26, 2)),
                                                            int.Parse(rowtxt.Substring(28, 2)),
                                                            int.Parse(rowtxt.Substring(30, 2)),
                                                            int.Parse(rowtxt.Substring(32, 2), System.Globalization.NumberStyles.HexNumber));
    en suite je crée un nouveau object avec quelque attributs avec des substring aussi (je sais que le substring utilise un peut de plus de poids dans le traitement)

    après le Set des donnée je additionne ça sur une List e je utilise un insertallonsubmit (avec Linq to Sql)
    A priori, cela peut se faire directement avec du SQL et un 'Bulk Insert'; pas grand interêt à passer par un programme client.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

Discussions similaires

  1. [Batch] ajout de ligne dans un txt puis lecture de chaque ligne
    Par anthology dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 15/06/2010, 17h42
  2. Lecture d'une ligne précise fichier txt
    Par House MD dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/11/2007, 15h20
  3. Réponses: 5
    Dernier message: 15/11/2006, 11h43
  4. [C] lecture des n lignes d'un fichier
    Par felicity dans le forum C
    Réponses: 12
    Dernier message: 12/01/2006, 23h12
  5. Pb import fichier txt avec lignes de longueurs diverses
    Par zebulon90 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/12/2004, 08h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo