From c13fd10bd82b3e83f36f5e81e2659548aafe777d Mon Sep 17 00:00:00 2001 From: JustArchi Date: Mon, 14 Aug 2017 05:31:01 +0200 Subject: [PATCH] Implement BackgroundGCPeriod Tough decision to make, but I promised going for full performance, so there is that. --- ArchiSteamFarm/ArchiSteamFarm.csproj | 2 ++ ArchiSteamFarm/GlobalConfig.cs | 3 +++ ArchiSteamFarm/Hacks.cs | 12 +++++------- ArchiSteamFarm/Program.cs | 5 ++--- ArchiSteamFarm/config/ASF.json | 1 + 5 files changed, 13 insertions(+), 10 deletions(-) diff --git a/ArchiSteamFarm/ArchiSteamFarm.csproj b/ArchiSteamFarm/ArchiSteamFarm.csproj index 7de425b6b..7ab2ca13f 100644 --- a/ArchiSteamFarm/ArchiSteamFarm.csproj +++ b/ArchiSteamFarm/ArchiSteamFarm.csproj @@ -18,6 +18,8 @@ https://github.com/JustArchi/ArchiSteamFarm.git https://github.com/JustArchi/ArchiSteamFarm/raw/master/resources/ASF.ico Git + true + true diff --git a/ArchiSteamFarm/GlobalConfig.cs b/ArchiSteamFarm/GlobalConfig.cs index 423761f34..e97536e0e 100644 --- a/ArchiSteamFarm/GlobalConfig.cs +++ b/ArchiSteamFarm/GlobalConfig.cs @@ -49,6 +49,9 @@ namespace ArchiSteamFarm { [JsonProperty(Required = Required.DisallowNull)] internal readonly bool AutoUpdates = true; + [JsonProperty(Required = Required.DisallowNull)] + internal readonly byte BackgroundGCPeriod; + [SuppressMessage("ReSharper", "CollectionNeverUpdated.Global")] [JsonProperty(Required = Required.DisallowNull)] internal readonly HashSet Blacklist = new HashSet(); diff --git a/ArchiSteamFarm/Hacks.cs b/ArchiSteamFarm/Hacks.cs index 0980cba13..f6e68f801 100644 --- a/ArchiSteamFarm/Hacks.cs +++ b/ArchiSteamFarm/Hacks.cs @@ -28,18 +28,16 @@ using System.Threading; namespace ArchiSteamFarm { internal static class Hacks { - private const byte GarbageCollectorDelay = 1; - private static Timer GarbageCollectionTimer; private static Timer GarbageCompactionTimer; - internal static void Init() { + internal static void EnableBackgroundGC(byte period) { if (GarbageCollectionTimer == null) { GarbageCollectionTimer = new Timer( e => GC.Collect(), null, - TimeSpan.FromSeconds(GarbageCollectorDelay), // Delay - TimeSpan.FromSeconds(GarbageCollectorDelay) // Period + TimeSpan.FromSeconds(period), // Delay + TimeSpan.FromSeconds(period) // Period ); } @@ -47,8 +45,8 @@ namespace ArchiSteamFarm { GarbageCompactionTimer = new Timer( e => GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce, null, - TimeSpan.FromMinutes(GarbageCollectorDelay), // Delay - TimeSpan.FromMinutes(GarbageCollectorDelay) // Period + TimeSpan.FromMinutes(period), // Delay + TimeSpan.FromMinutes(period) // Period ); } } diff --git a/ArchiSteamFarm/Program.cs b/ArchiSteamFarm/Program.cs index 2e0e44d41..2c1a0138a 100644 --- a/ArchiSteamFarm/Program.cs +++ b/ArchiSteamFarm/Program.cs @@ -31,7 +31,6 @@ using System.IO; using System.Linq; using System.Reflection; using System.Resources; -using System.Runtime; using System.Threading.Tasks; using ArchiSteamFarm.Localization; using NLog; @@ -238,8 +237,8 @@ namespace ArchiSteamFarm { return; } - if (GCSettings.IsServerGC) { - Hacks.Init(); + if (GlobalConfig.BackgroundGCPeriod > 0) { + Hacks.EnableBackgroundGC(GlobalConfig.BackgroundGCPeriod); } if (!string.IsNullOrEmpty(GlobalConfig.CurrentCulture)) { diff --git a/ArchiSteamFarm/config/ASF.json b/ArchiSteamFarm/config/ASF.json index c33993c5e..5d13f4eb6 100644 --- a/ArchiSteamFarm/config/ASF.json +++ b/ArchiSteamFarm/config/ASF.json @@ -1,6 +1,7 @@ { "AutoRestart": true, "AutoUpdates": true, + "BackgroundGCPeriod": 0, "Blacklist": [], "ConnectionTimeout": 60, "CurrentCulture": null,