Je voudrais faire un profilage de base de mon code, mais j'ai trouvé que le DateTime.Now en C# avait seulement une résolution d'environ 16 ms. Il doit y avoir de meilleurs temps à garder des constructions que je n'ai pas encore trouvées.Minuteur haute résolution dans .NET
Répondre
est ici un peu d'exemple de code en temps une opération:
Dim sw As New Stopwatch()
sw.Start()
//Insert Code To Time
sw.Stop()
Dim ms As Long = sw.ElapsedMilliseconds
Console.WriteLine("Total Seconds Elapsed: " & ms/1000)
EDIT:
Et la chose intéressante est qu'il peut également reprendre.
Stopwatch sw = new Stopwatch();
foreach(MyStuff stuff in _listOfMyStuff)
{
sw.Start();
stuff.DoCoolCalculation();
sw.Stop();
}
Console.WriteLine("Total calculation time: {0}", sw.Elapsed);
La classe System.Diagnostics.Stopwatch utilisera un compteur haute résolution si l'on est disponible sur votre système.
La classe System.Diagnostics.StopWatch est géniale pour le profilage.
Voici un lien vers Vance Morrison's Code Timer Blog si vous ne voulez pas écrire vos propres fonctions de mesure.
Vous pouvez appeler le compteur de performance haute résolution sous Windows. Le nom de la fonction est QueryPerformanceCounter dans kernel32.dll.
Syntaxe pour l'importation en C#:
[DllImport("Kernel32.dll")]
private static extern bool QueryPerformanceCounter(out long lpPerformanceCount);
Syntaxe pour les appels de Windows:
BOOL QueryPerformanceCounter(
LARGE_INTEGER *lpPerformanceCount
);
Pour les compteurs de performance ayant la résolution la plus élevée, vous pouvez utiliser les compteurs de performance win32 sous-jacents.
Ajouter le P suivant/Invoke sigs:
[System.Runtime.InteropServices.DllImport("Kernel32.dll")]
public static extern bool QueryPerformanceCounter(out long perfcount);
[System.Runtime.InteropServices.DllImport("Kernel32.dll")]
public static extern bool QueryPerformanceFrequency(out long freq);
et les appeler à l'aide:
#region Query Performance Counter
/// <summary>
/// Gets the current 'Ticks' on the performance counter
/// </summary>
/// <returns>Long indicating the number of ticks on the performance counter</returns>
public static long QueryPerformanceCounter()
{
long perfcount;
QueryPerformanceCounter(out perfcount);
return perfcount;
}
#endregion
#region Query Performance Frequency
/// <summary>
/// Gets the number of performance counter ticks that occur every second
/// </summary>
/// <returns>The number of performance counter ticks that occur every second</returns>
public static long QueryPerformanceFrequency()
{
long freq;
QueryPerformanceFrequency(out freq);
return freq;
}
#endregion
Dump tout dans une classe simple et vous êtes prêt à aller. Exemple (en supposant un nom de classe de PerformanceCounters):
long startCount = PerformanceCounter.QueryPerformanceCounter();
// DoStuff();
long stopCount = PerformanceCounter.QueryPerformanceCounter();
long elapsedCount = stopCount - startCount;
double elapsedSeconds = (double)elapsedCount/PerformanceCounter.QueryPerformanceFrequency();
MessageBox.Show(String.Format("Took {0} Seconds", Math.Round(elapsedSeconds, 6).ToString()));
La classe Stopwatch le fait pour vous à partir de .NET 2.0. –
- 1. Minuteur haute résolution avec C++ et Linux?
- 2. Affichage d'une image haute résolution
- 3. API stock temps réel/haute résolution?
- 4. Comment charger les images haute résolution dans Windows Mobile
- 5. Où puis-je obtenir une version transparente haute résolution du nouveau logo .NET?
- 6. Comment capturer une image haute résolution sous Windows Mobile
- 7. Applications de résolution croisée dans .NET
- 8. Définir la résolution de l'écran dans .Net
- 9. Les appels haute résolution sont-ils erronés au moment du retour de la fonction?
- 10. Comment créer dynamiquement un document PDF haute résolution basé sur le modèle
- 11. Obtention d'une exception de mémoire lors du chargement d'une image haute résolution avec IImagingFactory
- 12. Comment puis-je utiliser CreateTimerQueueTimer pour créer un temporisateur haute résolution en C#?
- 13. Liaison de minuteur d'appoint
- 14. Utilisation d'un minuteur pour boucler
- 15. C++ Minuteur ne fonctionne pas?
- 16. Mojo SDK - régler un minuteur
- 17. Python: haute précision time.sleep
- 18. Minuteur dans le formulaire utilisateur dans Excel VBA
- 19. Résolution en cascade dans Unity
- 20. .NET Web Service - Résolution incorrecte du nom d'hôte
- 21. nanosleep haute utilisation du processeur?
- 22. Démarrage manuel du travail du minuteur SharePoint
- 23. Portée d'une fonction de travail de minuteur
- 24. Comment utiliser .NET pour rallumer le moniteur après que le minuteur d'inactivité l'ait éteint?
- 25. Arrêt et démarrage d'un minuteur dans ASP.NET Ajax
- 26. Comment afficher l'état Echec dans le travail du minuteur Sharepoint
- 27. Minuteur d'exécution de processus léger pour Windows
- 28. Compte à rebours Minuteur requis, Programmation iPhone
- 29. Haute performance asp.net application mvc
- 30. Minuterie haute performance vs StopWatch
Eh oui, que l'on compte les tiques sur l'horloge haute résolution (le cas échéant) ... Exactement ce que je dois. –