C# - récupération du temps d'exécution d'une fonction ou d'une étape

Soyez le premier à donner votre avis sur cette source.

Snippet vu 25 150 fois - Téléchargée 29 fois

Contenu du snippet

Après avoir chercher comment faire, je me suis inspiré de différentes idées trouvées pour créer cette fonction extrèmement simple que vous pouvez adapter et intégrer dans vos projet suivant votre besoin.

Source / Exemple :


/// <summary>
/// Retourne le temps passé depuis le temps de départ transmis en paramètre
/// </summary>
/// <param name="TempsDeDepart">Instant de Départ</param>
/// <returns>Retourne le temps en textuel</returns>
private string renvoieTempsDexecution(DateTime TempsDeDepart)
{
	TimeSpan TempTempsExec = (DateTime.Now - TempsDeDepart);
	string TempRetour = string.Empty;

	TempRetour += RetournePlurielouSingulier(TempTempsExec.Days, "jour", ", ") ;
	TempRetour += RetournePlurielouSingulier(TempTempsExec.Hours, "heure", ", ");
	TempRetour += RetournePlurielouSingulier(TempTempsExec.Minutes, "minute", ", ");
	TempRetour += RetournePlurielouSingulier(TempTempsExec.Seconds, "seconde", ", ");
	TempRetour += RetournePlurielouSingulier(TempTempsExec.Milliseconds, "milliSeconde", "");

	return TempRetour;
}

/// <summary>
/// Retourne la chaine avec pluriel ou singulier, si nul, ne renvoie rien
/// </summary>
/// <param name="Valeur">Valeur à tester</param>
/// <param name="mot">Mot à accorder</param>
/// <param name="separateur">séparateur à ajouter</param>
/// <returns>Chaine avec accord</returns>
private string RetournePlurielouSingulier(int Valeur, string mot, string separateur)
{
	string tempretour = string.Empty;
	if (Valeur > 0)
	{
		if (Valeur == 1)
		{
			tempretour = Valeur.ToString() +" "+ mot + separateur;
		}
		else
		{
			tempretour = Valeur.ToString() +" "+ mot +"s" + separateur;
		}
	}
	return tempretour;
}

// ----------------------------------------------------------------
// Pour son utilisation :

// Déclaration de la variable au départ de votre fonction
DateTime InstantDepart = DateTime.Now;

// ...... Votre Code

string Texte = "Durée d'exécution : "+ renvoieTempsDexecution(InstantDepart);

Conclusion :


Pour l'utiliser, il vous suffit alors d'afficher la variable de texte.

Bon Coding

Romelard Fabrice

A voir également

Ajouter un commentaire

Commentaires

cs_poppyto
Messages postés
541
Date d'inscription
dimanche 29 décembre 2002
Statut
Modérateur
Dernière intervention
13 mai 2011
-
Malgré l'effort de commentaires, on n'utilise pas ta technique pour mesurer des performances car la résolution est trop importante (10ms)...On utilise des Timers "Multimedia", cf APIs QueryPerformanceCounter/QueryPerformanceFrequency ou alors System.Diagnostics.Stopwatch de .net 2.0
cs_fabrice69
Messages postés
1766
Date d'inscription
jeudi 12 octobre 2000
Statut
Modérateur
Dernière intervention
11 décembre 2013
4 -
Que tu ne l'utilises pas, soit, mais cette méthode a l'avantage de fonctionner et est extrèmement simple à mettre en place.
Dans un cas d'exécution extrèmement rapide il y sans doute mieu.
Dans mon cas, les 10 Millisecondes me vont très bien.

Pour ce qui est de la version de .NET, je suis en 1.1 et non en 2.0 (comme encore beaucoup de gens).

Cordialement
Romelard Fabrice
cs_poppyto
Messages postés
541
Date d'inscription
dimanche 29 décembre 2002
Statut
Modérateur
Dernière intervention
13 mai 2011
-
Je te l'accorde, pour .net 1.1 il est plus simple de mettre en place ta méthode que d'utiliser les API. Mais pour le 2.0, il faut utiliser StopWatch !

...J'ai l'impression que ta source est plus faite pour mesurer des grosses performances minutes/heures/jours ? Dans ce cas là je suis ok même pour .net 2.0
Nikoui
Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
19 août 2008
7 -
Ton code pourrait tenir en 3 lignes, en utilisant string.Format();

(dans ce cas, c'est anectotique, mais ca coute cher en ressource (temps & mémoire) de faire maString = maString + autreChose, car a chaque fois, ca crée une nouvelle string en mémoire avant de recopier dans la nouvelle (string est un type 'valeur'), donc à éviter pour manipuler les strings. Ne pas hésiter non plus à utiliser les StringBuilder pour manipuler les chaines)
bucherb
Messages postés
412
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
13 août 2007
-
Je ne suis pas d'accord Nikoui. String n'est pas un ValueType mais un Object

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.