Skip to content

The Dummy Programmer

Stories of daily programming

  • Home
  • The Dummy Programmer Robot
    • Overview
    • Version history & downloads
    • Tutorials
      • TDP Robot – The basics
      • A simple SQL Server backup solution
      • A simple SQL Server backup solution – A next step
  • My other dummy projects
  • Games
    • Space Y: An Asteroids clone
  • Services
    • What’s my user agent
    • What’s my IP address
  • Donate
  • About
  • Toggle search form

Is Environment.TickCount reliable?

Posted on September 16, 2021September 16, 2021 By

Hello my friends!

Today I want to talk about some problems encountered using the property Environment.TickCount, available since the version 1.1 of .NET Framework.

In a nutshell, this property tells you how many milliseconds elapsed since system boot.

Why did I have to use it?

During the development of TDP Robot, that I remind you can download here, I developed the event “TDP Robot service start event”, which at first used the property Environment.TickCount to find out if a TDP Robot service start was due to a system reboot or a simple service start.

So, having used it, I can answer the original question and say with certainty that Environment.TickCount is not reliable…

You can find the reason in Microsoft documentation at this address, which states the following:

Because the value of the TickCount property value is a 32-bit signed integer, if the system runs continuously, TickCount will increment from zero to Int32.MaxValue for approximately 24.9 days, then jump to Int32.MinValue, which is a negative number, then increment back to zero during the next 24.9 days. You can work around this issue by calling the Windows GetTickCount function, which resets to zero after approximately 49.7 days, or by calling the GetTickCount64 function.

What stated above is clearly a problem if you need to know exactly the system uptime!

To workaround this problem you could use the Windows API call GetTickCount64() which you can declare in you C# code as follow:

    [DllImport("kernel32")]
    extern static ulong GetTickCount64();

The function above return a 64 bit unsigned long. This means that you don’t have to worry about negative numbers or counter reset after 49.7 days.

But there is another problem: from the tests done on my PC (a Dell Inspiron laptop with Windows 10) I found that the counter obtained, both with Environment.GetTickCount and with the GetTickCount64 API, is never reset if you shutdown the system. It is only reset if you make a system reboot!

This is true also using other methods to get the system uptime, like using WMI calls (you can find some examples searching on the Internet).

Unfortunately, I do not have a solution to the problem yet, but I will not fail to post it as soon as I have one!

PS: in .NET 5 you can use the property Environment.TickCount64, so at least you can avoid a direct call to Windows API 🙂

C#, Windows 10

Post navigation

Previous Post: TDP Robot version 0.70.1.0
Next Post: FuelPHP & PHP installation issues

Related Posts

C# async / await behind the scenes C#
Configure a PHP development environment in Windows (part 3 of 4) PHP
Windows 10 search no more working!! Windows 10
Create a folder starting with dot in Windows Windows
Configure a PHP development environment in Windows (part 1 of 4) PHP
Dell Inspiron 15 7000 – No Networks Found Windows

Search

Subscribe to our newsletter

Related posts

  • Configure a PHP development environment in Windows (part 1…
  • Configure a PHP development environment in Windows (part 2…
  • Configure a PHP development environment in Windows (part 4…
  • Configure a PHP development environment in Windows (part 3…

Categories

  • .NET 6 (1)
  • AJAX (1)
  • Android (2)
  • Apache (4)
  • ASP.NET (9)
  • ASP.NET MVC (3)
  • Avalonia UI (1)
  • BCP (1)
  • Bitlocker (2)
  • C# (14)
  • CentOS (4)
  • ClosedXML (1)
  • CLR (1)
  • DNS (1)
  • Encryption (3)
  • Excel (2)
  • FuelPHP (3)
  • Google Chrome (1)
  • GSuite (1)
  • HTML (1)
  • Imagick (2)
  • Javascript (1)
  • Kindle (1)
  • LAMP (3)
  • Linux (6)
  • MariaDB (2)
  • Mathematics (2)
  • MySql (4)
  • NPOI (1)
  • Office 365 (1)
  • Perl (1)
  • PHP (6)
  • Programming (1)
  • Remote desktop (1)
  • SFTP (2)
  • Sockets (3)
  • Sql Server (18)
  • Sql Server 2016 (14)
  • Sql Server 2019 (1)
  • SSL (2)
  • Task scheduler (1)
  • Telerik ASP.NET AJAX (2)
  • The Dummy Programmer Chat (2)
  • The Dummy Programmer Robot (6)
  • Threading (5)
  • Tools (1)
  • TPL (3)
  • TypeScript (3)
  • Ubuntu (4)
  • Virtualization software (3)
  • Visual Studio (1)
  • Visual Studio Code (2)
  • Web fonts (1)
  • Web programming (6)
  • Windows (12)
  • Windows 10 (15)
  • Windows Forms (1)
  • Windows Server (5)

Copyright © 2022 The Dummy Programmer | Privacy Policy |

Powered by PressBook Masonry Dark