2009-09-05 6 views
2

Hey, en ce moment, j'ai essayé de trouver de bons moyens pour adoucir les threads dormant (au cas où il serait dérangé ou si votre ordinateur laggs etc).System.currentTimeMillis() de JAVA ou Environment.TickCount de C#?

Alors, quelle est la méthode globale "meilleure performance"?

méthode de JAVA System.currentTimeMillis() C#:

public static double GetCurrentMilliseconds() 
{ 
    DateTime staticDate = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); 
    TimeSpan timeSpan = DateTime.UtcNow - staticDate; 
    return timeSpan.TotalMilliseconds; 
} 

System.currentTimeMillis() en cours d'utilisation:

public void Run() 
    { 
     this.lastUpdate = TimeUtilities.GetCurrentMilliseconds(); 
     while (isRunning) 
     { 
      if (TimeUtilities.GetCurrentMilliseconds() - lastUpdate >= 600) 
      { 
       lastUpdate = TimeUtilities.GetCurrentMilliseconds(); 
       // bla bla bla... 
      } 

      try 
      { 
       Thread.Sleep(100); 
      } 
      catch (Exception ex) 
      { 
       Jolt.GetLog().WriteException(ex); 
      } 
     } 
    } 

et Environment.TickCount C# 's:

private void Run() 
    { 
     double lastUpdate = Environment.TickCount; 

     while (isRunning) 
     { 
      if (lastUpdate + 600 < Environment.TickCount) 
      { 
       lastUpdate = Environment.TickCount; 
       // bla bla bla... 
      } 

      try 
      { 
       Thread.Sleep(100); 
      } 
      catch (Exception ex) 
      { 
       Jolt.GetLog().WriteException(ex); 
      } 
     } 
    } 

Tous l'aide serait appréciée. Sinon, si c'est une mauvaise idée, pourriez-vous s'il vous plaît fournir un meilleur moyen de le faire.

Répondre

2

En utilisant l'approche de TickCount a de meilleures performances, pour plusieurs raisons:

  • il est un entier, et non pas une structure de données multi-octets
  • il est directement disponible, ne nécessitant pas les différents calculs

Performance-sage, vous ne devriez pas utiliser le type double. Pour mesurer une durée de 100 secondes, un int devrait suffire. Notez que TickCount passe de positif à négatif après 24 jours, donc utiliser TickCount ne fonctionnera plus après ce temps si vous utilisez double; Si vous utilisez int, vous devez l'écrire comme

if (Environment.TickCount-lastUpdate > 600) 
+0

Merci mon ami, c'est probablement la réponse dont j'avais besoin. – TheAJ

+0

Commentaire minuscule: si vous considérez que TickCount est un entier non signé, il ne sera pas retourné avant 48 jours. – RenniePet

0

TickCount a de meilleures performances à coup sûr.

Le temps de calcul du temps courant n'est pas nécessaire dans cette utilisation. Vous vous souciez seulement du temps écoulé, cela ne fait pas de différence si l'époque est 1970 ou le début du processus.