MinMax... suite et fin

boursicotteur Messages postés 201 Date d'inscription mercredi 25 septembre 2002 Statut Membre Dernière intervention 10 novembre 2007 - 10 oct. 2007 à 17:59
boursicotteur Messages postés 201 Date d'inscription mercredi 25 septembre 2002 Statut Membre Dernière intervention 10 novembre 2007 - 11 oct. 2007 à 20:43
Ceci est pour BruNews et fait suite au topic MinMax maintenant bloqué.

Voila, j'ai réussi à faire une première DLL en C++.
Résultat des tests (mêmes conditions que ta DLL)

Ta DLL:  329 mSec
Ma DLL avec ton algo: 334 mSec
Ma DLL avec mon algo: 343 mSec

Je conclus de ceci que ton algo fonctionne à la même vitesse dans les 2 DLL et que la boucle "for" n'est pas gourmande (mais rend le code plus facile à comprendre).

Une différence majeure par contre est la taille de la DLL obtenue.
28K pour ma DLL versus 3K pour ta DLL.
Mon compilateur est probablement mal ajusté...

En terminant, je tiens à te remercier (sincèrement) car sans cette "prise de bec" je n'aurais pas été autant motivé à me mettre au C++. Je réalise maintenant que VB est meilleur que C++ sur certains points et vice versa. Je vais donc utiliser VB et C++ conjointement.

Sans rancune!

====== fichier .def ========
LIBRARY   dll_fichier
DESCRIPTION "Une premiere Dll"
EXPORTSbnGetInt16MinMax [mailto:?bnGetInt16MinMax@@YGFPAFK0@Z ?bnGetInt16MinMax@@YGFPAFK0@Z]       PRIVATE fichier .cpp ========
#pragma once
#include <windows.h>

short __stdcall bnGetInt16MinMax(short *ptab, DWORD n, short *pMin);

BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
    return TRUE;
}




// Fonction bnGetInt16MinMax (mon algo)
short __stdcall bnGetInt16MinMax(short *ptab, DWORD n, short *pMin)
{  short val, min 0, max 0;
   if(!n) goto Exit; //sort si n=0
    min max *ptab; //retourne 1ère val
  if(!(n-1)) goto Exit; //sort si n=1
 
  for(;n-1;--n)   //n >= 2
  {
 val = *(++ptab); //retourne val suivante
 if(val < min)
 {
    min = val;
    continue;
 }
 if(val > max) max = val;
  }


Exit: 
  *pMin = min;
  return max;
}

2 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 oct. 2007 à 08:36
Ravi de voir que nos conseils ont porté leur fruits, tu semble t'en être bien tiré. Concernant le poids des dll, BruNews est apssé maitre en la matière il y a des années... suppression du cadre standard et autres truchements en tout genre ^^

ravi de voir que tu as eu la maturité de prender sur toi, de remonter tes manches et de revenir nous faire part de tes résultats.

concernant les languages, le C permet d'acceder rapidement et facilement à la mémoire, a utiliser pour les calculs important, dans les boucles cruciales. Le VB, lui, apporte le coté interface conviviale et rapide à réaliser... rien de plus

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
boursicotteur Messages postés 201 Date d'inscription mercredi 25 septembre 2002 Statut Membre Dernière intervention 10 novembre 2007
11 oct. 2007 à 20:43
Je sais qu'il sait mais...mon âme est trop "zen"...
Kapitch?
De toute façon, ce que j'ai besoin est la vitesse; la grosseur je m'en fout...

Pour mes manches, elles ont fondues avec le travail...
Pas évident de faire une DLL en C++ sans rien connaître...mais c'est faisable et pas mortel. J'ai appris le VB de la même façon en utilisant la source MSD de fredlynx pour télécharger des (tu sais quoi) sur MySpace.  Belle époque!

Le langage de C++ est en soit assez rapide à apprendre mais l'environnement de la DLL, la façon d'exporter, de se débarrasser des décoration (et de les trouver), de régler le compilateur, etc...c'est une autre histoire. C'est là que la source m'aurait été très utile!

Tu as raison pour les points forts de VB et C++.
J'entends continuer en VB et me faire des DLL en C++ (quand possible) pour l'accès mémoire et les longs calculs.  

Sans vouloir devenir un pro, je vais tout de même appronfondir le C++ pour être capable d'écrire de petites applications sans plus.

J'ai amélioré la fonction!
Elle est maintenant plus lisible et aussi plus rapide...321 mSec
Et voilà pour le pro!     :)

================
short __stdcall bnGetInt16MinMax(short *ptab, DWORD n, short *pMin)
{  short val, min 0, max 0;
   if(!n) goto Exit;          //sort si n=0
    min max *ptab;    //retourne 1ère val
  if(!(n-1)) goto Exit;     //sort si n=1
 
  for(;n-1;--n)   //n >= 2
  {
 val = *(++ptab);     //retourne val suivante
 if(val < min)
    min = val;
 else if(val > max)
    max = val;
  }


Exit: 
  *pMin = min;
  return max;
}
0
Rejoignez-nous