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

VB.NET Discussion :

Optimiser une requête


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 7
    Par défaut Optimiser une requête
    Bonjour à tous,

    J'ai créer une application en multilingue, jusque la tous va bien
    Le problème c'est lorsque je sélectionne ma langue, la procédure mais environ 30s a tous traduire, donc j'aimerais pouvoir réduire ce temps.
    J'explique comment j'ai procédé, mon client voulait pouvoir rajouter autant de langue qu'il le souhaitais, j'ai donc stocker tous mes controls a traduire dans une base de données, en parcourant tous le formulaires de l'application (40 Forms et environ 660 controls a traduire).
    Lors de l'ouverture de l'appli, j'appelle ma procédure qui parcours donc tous mes formulaires, et tous mes controls de chaque formulaire, et pour chaque control, je vais chercher dans la base de données le texte qui doit lui être associé en fonction de la langue choisit.

    Ce n'est peut être pas la meilleur solution, mais elle marche, par contre 30 secondes pour tous traduire, sa fait long, et sa bloque l'appli.

    Si vous avez des idées pour optimiser le temps, j'en serais ravi

    Merci

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Et pourquoi ne pas avoir utilisé le système de localisation de .Net ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 7
    Par défaut
    Car avec la méthode de localisation, un utilisateur via l'application, ne pouvait pas rajouter une langue.

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    il faudrait nous en dire plus, comment tu indexes ca dans la base de données (langue, form.name, control.name ?)

    si tu fais une requete par controle par exemple, normal que ca soit lent

    il faut faire une seule requete qui remonte les traductions, que la table soit bien indexée pour mettre moins d'un dixième de seconde à s'exécuter, et pouvoir retrouver les controles à modifier instantanément pendant la lecture des données remontées par la requete (collection indexée ?)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    Malheureusement, ce que tu as fait est flou...
    * Tu as stocké tes contrôles dans une DB ?! Tu ne veux pas plutôt dire que tu as stocké des paires {itenditifant ; chaîne} ? Ou bien travailles-tu en WPF et as-tu stocké du XAML ?
    * Au chargement de l'application tu parcours les formulaires et tu vas chercher les chaînes correspondantes... Qu'est-ce que ça veut dire ? Comment sont stockés tes identifiants (je soupçonne un usage intensif de la réflexion) ? Que veux-tu dire par "stocker" ? Tu les stockes dans un dictionnaire et les contrôles se voient assignés les chaînes nécessaires à la création de chaque formulaire ou bien modifies-tu du XAML ?
    * Pourquoi une DB ? Pour un déploiement de nouvelles langues sans mise à jour du client ? C'était vraiment nécessaire ? Si oui, ça pourrait être le problème : essaye alors de n'avoir qu'une seule requête, un long fichier csv/xml stocké dans une DB. Si la DB n'est pas nécessaire, opter pour un simple fichier csv/xml par langue aurait été plus judicieux.

    PS : Essaye d'être précis sur termes, impossible de comprendre ce que fait ton appli avec ton message initial, encore moins de deviner d'où vient le pb de performances.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 7
    Par défaut
    Je vais essayer d'être plus claire.
    Donc dans ma BD, j'ai une table control avec un id, et le nom de control (contol.name) j'ai une table langue avec un id et le nom de la langue. Et après j'ai une table avec l'id control, l'id langue, et le texte pour le control, Voila coté BD.

    Dans l'appli pour récupérer mon texte à associé au control :
    J'ai une boucle pour accèder a tous mes formulaires,
    Pour chaque formulaire, je parcours tous ses control, je regarde si le control est dans la DB, si oui, je lui affecte le texte (c'est une fonction récursive pour avoir aussi les control enfant).

    J'espère avoir été plus claire ^^, pas facile.

  7. #7
    Membre Expert

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 067
    Par défaut
    ça veut dire qu'il va à chaque fois faire une requête sur ta bdd pour vérifier l'existence et auquel cas le récupérer, le mieux c'est de récupérer tous dans une liste (correspondant à la bonne langue) au lancement de l'application (en une seule requête) et faire la comparaison par rapport a cette liste

Discussions similaires

  1. Optimiser une requête de "classement"
    Par Manu0086 dans le forum Requêtes
    Réponses: 7
    Dernier message: 09/03/2006, 18h47
  2. besoin d'aide pour optimiser une requête
    Par jisse dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/01/2006, 09h41
  3. Optimiser une requête..est-ce possible ?
    Par Thierry8 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 27/09/2005, 11h31
  4. Optimiser une requête SQL d'un moteur de recherche
    Par kibodio dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/03/2005, 20h55

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