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,