From e338ae4188e2e2abd5ce0ef4c95adcb1caf9f761 Mon Sep 17 00:00:00 2001 From: JustArchi Date: Mon, 23 Jan 2017 00:46:44 +0100 Subject: [PATCH] DateTime optimizations DateTime.UtcNow is from at least 30 up to even 117 times faster than DateTime.Now. We have many places in which we compare our date to previous one we set ourselves - in all those places we can (and should) use UtcNow instead of Now. Local DateTime is still around in some places, those that are user-specific, such as when logging messages. --- ArchiSteamFarm/ArchiHandler.cs | 2 +- ArchiSteamFarm/ArchiWebHandler.cs | 8 ++++---- ArchiSteamFarm/Bot.cs | 2 +- ArchiSteamFarm/CardsFarmer.cs | 12 ++++++------ ArchiSteamFarm/Statistics.cs | 6 +++--- ArchiSteamFarm/Utilities.cs | 2 +- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/ArchiSteamFarm/ArchiHandler.cs b/ArchiSteamFarm/ArchiHandler.cs index e24b9ca24..07d620193 100644 --- a/ArchiSteamFarm/ArchiHandler.cs +++ b/ArchiSteamFarm/ArchiHandler.cs @@ -55,7 +55,7 @@ namespace ArchiSteamFarm { return; } - LastPacketReceived = DateTime.Now; + LastPacketReceived = DateTime.UtcNow; switch (packetMsg.MsgType) { case EMsg.ClientFSOfflineMessageNotification: diff --git a/ArchiSteamFarm/ArchiWebHandler.cs b/ArchiSteamFarm/ArchiWebHandler.cs index 33cb85ec6..05d89361e 100644 --- a/ArchiSteamFarm/ArchiWebHandler.cs +++ b/ArchiSteamFarm/ArchiWebHandler.cs @@ -871,7 +871,7 @@ namespace ArchiSteamFarm { } Ready = true; - LastSessionRefreshCheck = DateTime.Now; + LastSessionRefreshCheck = DateTime.UtcNow; return true; } @@ -1240,20 +1240,20 @@ namespace ArchiSteamFarm { } private async Task RefreshSessionIfNeeded() { - if (DateTime.Now.Subtract(LastSessionRefreshCheck).TotalSeconds < MinSessionTTL) { + if (DateTime.UtcNow.Subtract(LastSessionRefreshCheck).TotalSeconds < MinSessionTTL) { return true; } await SessionSemaphore.WaitAsync().ConfigureAwait(false); try { - if (DateTime.Now.Subtract(LastSessionRefreshCheck).TotalSeconds < MinSessionTTL) { + if (DateTime.UtcNow.Subtract(LastSessionRefreshCheck).TotalSeconds < MinSessionTTL) { return true; } bool? isLoggedIn = await IsLoggedIn().ConfigureAwait(false); if (isLoggedIn.GetValueOrDefault(true)) { - LastSessionRefreshCheck = DateTime.Now; + LastSessionRefreshCheck = DateTime.UtcNow; return true; } else { Bot.ArchiLogger.LogGenericInfo(Strings.RefreshingOurSession); diff --git a/ArchiSteamFarm/Bot.cs b/ArchiSteamFarm/Bot.cs index 42823d3e9..8b6f96d3e 100755 --- a/ArchiSteamFarm/Bot.cs +++ b/ArchiSteamFarm/Bot.cs @@ -757,7 +757,7 @@ namespace ArchiSteamFarm { } try { - if (DateTime.Now.Subtract(ArchiHandler.LastPacketReceived).TotalSeconds > MinHeartBeatTTL) { + if (DateTime.UtcNow.Subtract(ArchiHandler.LastPacketReceived).TotalSeconds > MinHeartBeatTTL) { await SteamApps.PICSGetProductInfo(0, null); } diff --git a/ArchiSteamFarm/CardsFarmer.cs b/ArchiSteamFarm/CardsFarmer.cs index 2c3f51db4..c7e57460a 100755 --- a/ArchiSteamFarm/CardsFarmer.cs +++ b/ArchiSteamFarm/CardsFarmer.cs @@ -517,22 +517,22 @@ namespace ArchiSteamFarm { } Bot.ArchiHandler.PlayGame(game.AppID, Bot.BotConfig.CustomGamePlayedWhileFarming); - DateTime endFarmingDate = DateTime.Now.AddHours(Program.GlobalConfig.MaxFarmingTime); + DateTime endFarmingDate = DateTime.UtcNow.AddHours(Program.GlobalConfig.MaxFarmingTime); bool success = true; bool? keepFarming = await ShouldFarm(game).ConfigureAwait(false); - while (keepFarming.GetValueOrDefault(true) && (DateTime.Now < endFarmingDate)) { + while (keepFarming.GetValueOrDefault(true) && (DateTime.UtcNow < endFarmingDate)) { Bot.ArchiLogger.LogGenericInfo(string.Format(Strings.StillIdling, game.AppID, game.GameName)); - DateTime startFarmingPeriod = DateTime.Now; + DateTime startFarmingPeriod = DateTime.UtcNow; if (FarmResetEvent.Wait(60 * 1000 * Program.GlobalConfig.FarmingDelay)) { FarmResetEvent.Reset(); success = KeepFarming; } // Don't forget to update our GamesToFarm hours - game.HoursPlayed += (float) DateTime.Now.Subtract(startFarmingPeriod).TotalHours; + game.HoursPlayed += (float) DateTime.UtcNow.Subtract(startFarmingPeriod).TotalHours; if (!success) { break; @@ -568,14 +568,14 @@ namespace ArchiSteamFarm { while (maxHour < 2) { Bot.ArchiLogger.LogGenericInfo(string.Format(Strings.StillIdlingList, string.Join(", ", games.Select(game => game.AppID)))); - DateTime startFarmingPeriod = DateTime.Now; + DateTime startFarmingPeriod = DateTime.UtcNow; if (FarmResetEvent.Wait(60 * 1000 * Program.GlobalConfig.FarmingDelay)) { FarmResetEvent.Reset(); success = KeepFarming; } // Don't forget to update our GamesToFarm hours - float timePlayed = (float) DateTime.Now.Subtract(startFarmingPeriod).TotalHours; + float timePlayed = (float) DateTime.UtcNow.Subtract(startFarmingPeriod).TotalHours; foreach (Game game in games) { game.HoursPlayed += timePlayed; } diff --git a/ArchiSteamFarm/Statistics.cs b/ArchiSteamFarm/Statistics.cs index 2f2941940..603241b4b 100644 --- a/ArchiSteamFarm/Statistics.cs +++ b/ArchiSteamFarm/Statistics.cs @@ -57,14 +57,14 @@ namespace ArchiSteamFarm { public void Dispose() => Semaphore.Dispose(); internal async Task OnHeartBeat() { - if (!ShouldSendHeartBeats || (DateTime.Now < LastHeartBeat.AddMinutes(MinHeartBeatTTL))) { + if (!ShouldSendHeartBeats || (DateTime.UtcNow < LastHeartBeat.AddMinutes(MinHeartBeatTTL))) { return; } await Semaphore.WaitAsync().ConfigureAwait(false); try { - if (!ShouldSendHeartBeats || (DateTime.Now < LastHeartBeat.AddMinutes(MinHeartBeatTTL))) { + if (!ShouldSendHeartBeats || (DateTime.UtcNow < LastHeartBeat.AddMinutes(MinHeartBeatTTL))) { return; } @@ -76,7 +76,7 @@ namespace ArchiSteamFarm { // We don't need retry logic here if (await Program.WebBrowser.UrlPost(request, data).ConfigureAwait(false)) { - LastHeartBeat = DateTime.Now; + LastHeartBeat = DateTime.UtcNow; } } finally { Semaphore.Release(); diff --git a/ArchiSteamFarm/Utilities.cs b/ArchiSteamFarm/Utilities.cs index 44987ac35..4c70c8f1d 100644 --- a/ArchiSteamFarm/Utilities.cs +++ b/ArchiSteamFarm/Utilities.cs @@ -58,7 +58,7 @@ namespace ArchiSteamFarm { return cookies.Count != 0 ? (from Cookie cookie in cookies where cookie.Name.Equals(name) select cookie.Value).FirstOrDefault() : null; } - internal static uint GetUnixTime() => (uint) DateTimeOffset.Now.ToUnixTimeSeconds(); + internal static uint GetUnixTime() => (uint) DateTimeOffset.UtcNow.ToUnixTimeSeconds(); /* internal static int RandomNext(int maxWithout) {