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

Windows Forms Discussion :

[C++/VB.Net]Optimiser des traitements lourds


Sujet :

Windows Forms

  1. #1
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut [C++/VB.Net]Optimiser des traitements lourds
    Bonjour,

    je développe avec VB.Net et en ce moment je travaille sur une application qui nécessite beaucoup de calculs.

    En vue de les optimiser j'aimerais faire appel à une DLL C++ qui réaliserait ces calculs plus rapidement (au moins légèrement).

    le problème est que je n'arrive pas à atteindre mes classes VB.Net à partir du projet C++.

    Quelqu'un a-t-il des conseils à me donner ? une url utile qui traite du sujet ?

  2. #2
    Membre Expert
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Par défaut
    Salut
    le problème est que je n'arrive pas à atteindre mes classes VB.Net à partir du projet C++.
    Heu c'est pas l'inverse?

    Si c++ doit acceder a ton vb, il faut aller dans:
    Menu Projet / Proprietes de ton projet / Bouton Assembly Information / Cocher "Make assembly COM Visible"

  3. #3
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Je n'ai pas ce dernier bouton "Assembly Information". je suis sous 2003

    En fait regarde :

    Mon Solution se présente comme cela :

    Solution
    +--ProjetVBPrincipal
    | +--frmPrincipal
    | +--class1
    | +--UserControl1
    | +--UserControl2
    |
    +--ProjetC++
    | +--UserControl3

    J'ai en fait des usercontrols posés sur un formulaire principal et qui manipulent des objets "class1".

    L'usercontrol3 existe déjà dans mon projet VB, je veux juste le traduire en C++ pour qu'il soit rapide dans les calculs.
    Je pense que je suis obligé pour cela de créer un nouveau projet comme sur l'arborescence ? (nouveau langage, nouveau projet ?)
    Seulement, je dois, dans mon usercontrol3, manipuler des class1, mais je n'arrive pas à faire un "dim truc as class1", ou plutot "private: Class1 * truc;"
    J'ai également essayé : "private: ProjetVBPrincipal::Class1 * truc;" mais ça ne veut pas... J'ai ajouté mon projet VB dans les références de mon projet C++ mais ça ne veut pas... J'ai essayé using namespace ProjetVBPrincipal mais ça ne veut pas... bref comment je dois faire ?

    En VB par contre je n'ai pas eu de probleme, j'arrive à instancier des objets tirés d'une DLL C++.

    merci d'avance

    PS: au fait, que veut dire l'étoile dans "private: Class1 * truc;" ,

  4. #4
    Membre Expert
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Par défaut
    Si tu fais un controle en C++, je crois que ca veut dire que tu fais du code managé, et donc ton gain de temps sera minime.

    Deuxieme remarque: le projet vb.net doit rester le projet de demarrage et c'est lui qui doit avoir comme reference la dll en C++

    Il fait quoi ce user control pour etre si lent? (en vb si tu mets du code )

  5. #5
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Citation Envoyé par Piotrek
    Si tu fais un controle en C++, je crois que ca veut dire que tu fais du code managé, et donc ton gain de temps sera minime.
    Pourquoi donc ?

    Citation Envoyé par Piotrek
    Deuxieme remarque: le projet vb.net doit rester le projet de demarrage et c'est lui qui doit avoir comme reference la dll en C++
    Oui je suis bien d'accord, mais si je ne peux pas atteindre d'une maniere ou d'une autre ma Class1 dans mon projet C++, c'est inexploitable. La solution serait peut-etre de sortir Class1 dans une autre DLL et de mettre cette DLL en référence aux deux projets C++ et VB ?

    Citation Envoyé par Piotrek
    Il fait quoi ce user control pour etre si lent? (en vb si tu mets du code )
    Et bien mon usercontrol permet la visualisation d'un fichier wav. J'ai un tableau par canal (1 en mono ou 2 en stéréo) avec autant de valeurs que d'échantillons dans le wav.
    j'instancie également 1 usercontrol par canal. La tache de l'usercontrol est de dessiner la courbe représentant le son. Il converti donc les valeurs du tableau en coordonnées et dessine une ligne passant par les points créés.
    Il est courant que mes tableaux soient grands de plusieurs millions d'échantillons chacuns, même si je ne dessine pas tous les échantillons, l'affichage n'est pas instantané pour de gros fichiers et j'aimerais un peu accelere le processus.

  6. #6
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    comme le dit piotrek, que tu fasses ton userControl en VB.Net ou en C++.Net, cela ne va pas changer grand chose question performances, à partir du moment où le code généré sera du MSIL et donc, executé depuis le VES.

    Tu pourrais eventuellement optimiser les performances en faisant une dll en C++ natif, mais dans ce cas là, il faut limitier au maximum de passer de monde managé au monde non managé, les appels p/invoke étant gourmand en temps.

  7. #7
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    merci de ta réponse,

    ok donc je laisse mon usercontrol en vb.Net, je créer juste une fonction C++ avec en parametre un tableau de Bytes et tous les paramètres dont je pourrait avoir besoin en valeurs et qui me renvoie un tableau de Points histoire de limiter les accès à d'autres classes de VB.Net ?
    Question qu'est ce que ça implique pour moi de créer un DLL C++ "natif" ? Qu'est ce que je dois lui dire pour qu'il me la compile en natif ?

  8. #8
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    si c'est un long traitement pourquoi pas

    pour créer une dll native, tu dois avoir un projet quelque part, en win32

  9. #9
    Membre Expert
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Par défaut
    Salut

    Je crois que la meilleure chose a faire c'est d'auditer plus finement le code pour voir d'ou le pb de performance vient

    - Si c'est l'affichage qui ralentit le tout, essaie d'utiliser directX (telecharge le SDK, il y a moults exemples dedans et c'est directement utilisable en .net)
    - Si c'est les calculs, cree une dll en c++ pur pour dialoguer avec ou fais un mix de code non manag / manage sous C++ .net ou C#

Discussions similaires

  1. [PHP 5.4] Optimisation des traitements (SQL)
    Par qltmi dans le forum Langage
    Réponses: 1
    Dernier message: 06/04/2013, 11h59
  2. [Conception] Optimisation des traitements de variable
    Par nebil dans le forum PHP & Base de données
    Réponses: 43
    Dernier message: 18/08/2006, 21h22

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