[System] Don't use DateTime.Now for measuring elapsed time
authorAlexander Köplinger <alex.koeplinger@outlook.com>
Sun, 2 Jul 2017 11:16:30 +0000 (13:16 +0200)
committerAlexander Köplinger <alex.koeplinger@outlook.com>
Sun, 2 Jul 2017 21:31:34 +0000 (23:31 +0200)
Use Stopwatch or DateTime.UtcNow instead which aren't affected
by things like daylight-saving time

mcs/class/System/System.IO/DefaultWatcher.cs
mcs/class/System/System.Net.NetworkInformation/Ping.cs
mcs/class/System/System.Net/DigestClient.cs
mcs/class/System/Test/System.ComponentModel/standalone_tests/TypeDescriptorTest.cs
mcs/class/System/Test/System.Diagnostics/ProcessTest.cs
mcs/class/System/Test/System.Net/HttpWebRequestTest.cs

index d08e60984161333f17f2b4ebab9bb5dc8b75c5c6..cbda2b294aa78f73d4c034d82c42968372fe3f9b 100644 (file)
@@ -127,7 +127,7 @@ namespace System.IO {
                                data = (DefaultWatcherData) watches [fsw];
                                if (data != null) {
                                        data.Enabled = false;
-                                       data.DisabledTime = DateTime.Now;
+                                       data.DisabledTime = DateTime.UtcNow;
                                }
                        }
                }
@@ -171,7 +171,7 @@ namespace System.IO {
                {
                        if (!data.Enabled) {
                                return (data.DisabledTime != DateTime.MaxValue &&
-                                       (DateTime.Now - data.DisabledTime).TotalSeconds > 5);
+                                       (DateTime.UtcNow - data.DisabledTime).TotalSeconds > 5);
                        }
 
                        DoFiles (data, data.Directory, dispatch);
index 3f08b563774354d73bea8fa6999603313934def2..59b635fb95c74c2f6fc7c666bae43d64da382d3b 100644 (file)
@@ -246,7 +246,7 @@ namespace System.Net.NetworkInformation {
                                s.SendBufferSize = bytes.Length;
                                s.SendTo (bytes, bytes.Length, SocketFlags.None, target);
 
-                               DateTime sentTime = DateTime.Now;
+                               var sw = Stopwatch.StartNew ();
 
                                // receive
                                bytes = new byte [100];
@@ -262,7 +262,7 @@ namespace System.Net.NetworkInformation {
                                                }
                                                throw new NotSupportedException (String.Format ("Unexpected socket error during ping request: {0}", error));
                                        }
-                                       long rtt = (long) (DateTime.Now - sentTime).TotalMilliseconds;
+                                       long rtt = (long) sw.ElapsedMilliseconds;
                                        int headerLength = (bytes [0] & 0xF) << 2;
                                        int bodyLength = rc - headerLength;
 
@@ -294,7 +294,7 @@ namespace System.Net.NetworkInformation {
                private PingReply SendUnprivileged (IPAddress address, int timeout, byte [] buffer, PingOptions options)
                {
 #if MONO_FEATURE_PROCESS_START
-                       DateTime sentTime = DateTime.UtcNow;
+                       var sw = Stopwatch.StartNew ();
 
                        Process ping = new Process ();
                        string args = BuildPingArgs (address, timeout, options);
@@ -318,7 +318,7 @@ namespace System.Net.NetworkInformation {
                                string stderr = ping.StandardError.ReadToEnd ();
 #pragma warning restore 219
                                
-                               trip_time = (long) (DateTime.UtcNow - sentTime).TotalMilliseconds;
+                               trip_time = (long) sw.ElapsedMilliseconds;
                                if (!ping.WaitForExit (timeout) || (ping.HasExited && ping.ExitCode == 2))
                                        status = IPStatus.TimedOut;
                                else if (ping.ExitCode == 0)
index f570a7396506149012bed764229b3562da8d7c98..3257f957efeae9f4a83ddb1ff1cbf0c43d7690d8 100644 (file)
@@ -204,7 +204,7 @@ namespace System.Net
                public DigestSession () 
                {
                        _nc = 1;
-                       lastUse = DateTime.Now;
+                       lastUse = DateTime.UtcNow;
                }
 
                public string Algorithm {
@@ -305,7 +305,7 @@ namespace System.Net
                        if (request == null)
                                return null;
        
-                       lastUse = DateTime.Now;
+                       lastUse = DateTime.UtcNow;
                        NetworkCredential cred = credentials.GetCredential (request.RequestUri, "digest");
                        if (cred == null)
                                return null;
@@ -378,7 +378,7 @@ namespace System.Net
                                return;
 
                        DateTime t = DateTime.MaxValue;
-                       DateTime now = DateTime.Now;
+                       DateTime now = DateTime.UtcNow;
                        ArrayList list = null;
                        foreach (int key in cache.Keys) {
                                DigestSession elem = (DigestSession) cache [key];
index 7154e186e73e8a47a3d3a187dfb2baea4b76c064..c13db55a0168b418536e941c77949d5c083bf65e 100644 (file)
@@ -1,4 +1,5 @@
 using System;\r
+using System.Diagnostics;\r
 using System.ComponentModel;\r
 using System.Web.UI.WebControls;\r
 \r
@@ -14,9 +15,9 @@ class Test {
 \r
        static void Main(string[] args) {\r
                Console.WriteLine ("This test should normally take less than a second");\r
-               DateTime start = DateTime.Now;\r
+               var sw = Stopwatch.StartNew ();\r
                DoTest ();\r
-               TimeSpan ts = DateTime.Now - start;\r
+               TimeSpan ts = sw.Elapsed;\r
                Console.Write ("Time spent: ");\r
                Console.WriteLine (ts.ToString());\r
        }\r
index 2d321b814a1648e52420589cf1137428d99c1f11..2afa4457ae463bdb1ae002ceca5b34016c931226 100644 (file)
@@ -714,11 +714,11 @@ namespace MonoTests.System.Diagnostics
                        byte [] buffer = new byte [200];
 
                        // start async Read operation
-                       DateTime start = DateTime.Now;
+                       var sw = Stopwatch.StartNew ();
                        IAsyncResult ar = stdout.BeginRead (buffer, 0, buffer.Length,
                                                            new AsyncCallback (Read), stdout);
 
-                       Assert.IsTrue ((DateTime.Now - start).TotalMilliseconds < 1000, "#01 BeginRead was not async");
+                       Assert.IsTrue (sw.ElapsedMilliseconds < 1000, "#01 BeginRead was not async");
                        p.WaitForExit ();
                        Assert.AreEqual (0, p.ExitCode, "#02 script failure");
 
index 80be0e4eb94d37e9482b76b02caba36592ba91b1..258e267787dd41137596051c3011569444c64ed2 100644 (file)
@@ -1356,7 +1356,7 @@ namespace MonoTests.System.Net
                                req.Headers.Add (HttpRequestHeader.IfNoneMatch, "898bbr2347056cc2e096afc66e104653");
                                req.IfModifiedSince = new DateTime (2010, 01, 04);
 
-                               DateTime start = DateTime.Now;
+                               var sw = global::System.Diagnostics.Stopwatch.StartNew ();
                                HttpWebResponse response = null;
 
                                try {
@@ -1373,7 +1373,7 @@ namespace MonoTests.System.Net
                                        Assert.AreEqual (0, bytesRead, "#3");
                                }
 
-                               TimeSpan elapsed = DateTime.Now - start;
+                               TimeSpan elapsed = sw.Elapsed;
                                Assert.IsTrue (elapsed.TotalMilliseconds < 2000, "#4");
                        }
                }
@@ -1426,14 +1426,14 @@ namespace MonoTests.System.Net
                                        var req = (HttpWebRequest) WebRequest.Create (url_to_test);
                                        req.Timeout = TimeOutInMilliSeconds;
 
-                                       Start = DateTime.Now;
+                                       Start = DateTime.UtcNow;
                                        using (var resp = (HttpWebResponse) req.GetResponse ())
                                        {
                                                var sr = new StreamReader (resp.GetResponseStream (), Encoding.UTF8);
                                                Body = sr.ReadToEnd ();
                                        }
                                } catch (Exception e) {
-                                       End = DateTime.Now;
+                                       End = DateTime.UtcNow;
                                        Exception = e;
                                }
                        }