Skip to content

The Dummy Programmer

Stories of daily programming

  • Home
  • My other dummy projects
  • Games
    • Space Y: An Asteroids clone
  • Services
    • What’s my user agent
    • What’s my IP address
  • 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: The Goldbach’s conjecture
Next Post: FuelPHP & PHP installation issues

Related Posts

Working with C# async / await keywords (part 3 of 3) C#
Quickly open the startup folder in Windows 10 Windows
Dell Inspiron 15 7000 – No Networks Found Windows
Configure a PHP development environment in Windows (part 2 of 4) PHP
Create a folder starting with dot in Windows Windows
Make user interface calls in thread safe way in Windows Forms C#

Search

Related posts

  • Configure a PHP development environment in Windows…
  • Configure a PHP development environment in Windows…
  • Configure a PHP development environment in Windows…
  • Configure a PHP development environment in Windows…

Categories

  • .NET 6 (1)
  • .NET 7 (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)
  • Games (2)
  • Google Chrome (1)
  • GSuite (1)
  • HTML (1)
  • Imagick (2)
  • Javascript (1)
  • Kindle (1)
  • LAMP (3)
  • Linux (7)
  • 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 (20)
  • Sql Server 2016 (14)
  • Sql Server 2019 (1)
  • SSL (4)
  • Task scheduler (1)
  • Telerik ASP.NET AJAX (2)
  • The Dummy Programmer Chat (2)
  • Threading (5)
  • Tools (1)
  • TPL (3)
  • TypeScript (3)
  • Ubuntu (4)
  • Virtualization software (3)
  • Visual Studio (1)
  • Visual Studio Code (2)
  • VueJS (1)
  • Web fonts (1)
  • Web programming (6)
  • Windows (12)
  • Windows 10 (15)
  • Windows Forms (1)
  • Windows Server (6)

Copyright © 2024 The Dummy Programmer | Privacy Policy | Terms of use |

Powered by PressBook Masonry Dark

Manage Cookie Consent
This site doesn’t collect user personal data and doesn’t install profiling or analytical cookies, either its own or from third parties. Read our privacy policy for more info.
Functional Always active
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
Manage options Manage services Manage {vendor_count} vendors Read more about these purposes
View preferences
{title} {title} {title}