Tests de rapidite 2 (win32)

Soyez le premier à donner votre avis sur cette source.

Vue 3 368 fois - Téléchargée 219 fois

Description

Suite du test de Anacr0x, mode graphique.
Je laisse sprintf qui est assurement trop lent.
Vous devriez trouver resultats egaux pour fichiers.
Tester plusieurs fois de suite pour faire une moyenne.
L'exe n'a aucune dependance sur msvcrt.dll, ceci expliquant cela.

Source / Exemple :


#include <windows.h>
#include "resource.h"
#include <stdio.h>
#include "bnPrecis.h"

#define SIZEBUFF 8192

int i;
HWND hres[2];
char szbuff[SIZEBUFF];
char szFL1[] = "fopen.txt";
char szFL2[] = "win32.txt";
char szERROR[] = "ERREUR";

void TesteFichiers()
{
  FILE *ouvre;
  HANDLE hfl;
  DWORD r;
  bnTicksStart();
  ouvre = fopen(szFL1, "w");
  if(ouvre == NULL) goto errFopen;
  for(i = 0; i < 6000; i++)
    r = fwrite(szbuff, SIZEBUFF, 1, ouvre);
  fclose(ouvre);
  _ui64toa(bnTicksResult(), szbuff, 10);
  SetWindowText(hres[0], szbuff);
  DeleteFile(szFL1);
  goto testWin32;
errFopen:
  SetWindowText(hres[0], szERROR);
testWin32:
  bnTicksStart();
  hfl = CreateFile(szFL2,GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_FLAG_SEQUENTIAL_SCAN,0);
  if(hfl == INVALID_HANDLE_VALUE) goto errWin32;
  for(i = 0; i < 6000; i++)
    WriteFile(hfl, szbuff, SIZEBUFF, &r, 0 );
  CloseHandle(hfl);
  _ui64toa(bnTicksResult(), szbuff, 10);
  DeleteFile(szFL2);
  goto dispWin32;
errWin32:
  strcpy(szbuff, szERROR);
dispWin32:
  SetWindowText(hres[1], szbuff);
}

BOOL CALLBACK AppDlgProc(HWND hdlg, UINT mssg, WPARAM wParam, LPARAM lParam)
{
  switch(mssg) {
    case WM_INITDIALOG:
      SetClassLong(hdlg, GCL_HICON, (long)LoadIcon(0, IDI_APPLICATION));
      hres[0] = GetDlgItem(hdlg, ID_RES0);
      hres[1] = GetDlgItem(hdlg, ID_RES1);
      return 1;
    case WM_COMMAND:
      switch(wParam) {
        case IDBT_1:
          SetWindowText(hres[0], 0);
          SetWindowText(hres[1], 0);
          TesteFichiers();
          return 0;
        case IDCANCEL: EndDialog(hdlg, 0);
      }
  }
  return 0;
}

int WINAPI WinMain(HINSTANCE hinst, HINSTANCE, PSTR, int)
{
  DialogBoxParam(hinst, (LPCTSTR)IDD_APP, 0, AppDlgProc, 0);
  return 0;
}

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
Bien entendu ça n'aurait aucun intérêt employé juste comme cet exemple, c'est surtout valable sur la lecture.
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
C'est ca que je comprends pas: ca sert a quoi de mettre dans le cache si on ne lit qu'une fois? Ou alors j'ai pas compris le principe du cache
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
FILE_FLAG_SEQUENTIAL_SCAN indique de mettre les octets suivant en cache tant que faire se peut, c'est impec si on lit le fichier en continu sans mouvement de va et vient sur le fichier.
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
A propos de cet avant dernier param de CreateFile, j'ai lu MSDN et je suis pas sur de bien avoir compris. Apparemment ca serait plus rapide quand on lit des gros blocs de manière linéaire. Mais si c'est lié au cache, et comme tu n'écris qu'une seule fois le fichier, ca change quoi exctement?
Par ailleurs, si taille d'un cluster est supérieure à ton SIZEBUFF, cela diminue-t-il les performances?
Messages postés
173
Date d'inscription
jeudi 20 décembre 2001
Statut
Membre
Dernière intervention
22 août 2008

ok ... mais bon, en general, dans un programme, tu optimise les points sensibles, en te demandant ce qui fera la difference : est ce que je dois passer en iteratif, est ce que je peux utiliser un algo dynamique (ok ici rien de tout ca mais c est un exemple) ... or ici, tu gagne quoi ? Qques cycles cpu, mais vraiment peu par rapport a ce que tu perds coté lisibilité (goto powaa), ce qui de plus n est plus vraiment necessaire de nos jours...
Mais bon si c est ton style de code, et que c est logique pour toi de coder comme ca, t as aucune raison de changer ... jdis juste ca pour faire comprendre que c est pas en ameliorant les details que tu feras de bons programmes ...
maintenant si tu utilise des goto un peu partout dans une equipe de dev, je me demande si les autres vont accepter ou bien te lyncher sur place ?...
Afficher les 14 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.