From ed0e2623b9dd9e12f7660bb067166c294ad8a2ee Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sat, 29 Sep 2018 17:42:12 +0100 Subject: add a few more gc collect in some spots --- OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequest.cs | 9 +++++++++ OpenSim/Region/CoreModules/World/Archiver/AssetsRequest.cs | 7 +++++++ 2 files changed, 16 insertions(+) (limited to 'OpenSim/Region/CoreModules/World/Archiver') diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequest.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequest.cs index 11c53d7..fe74cf1 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequest.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequest.cs @@ -30,6 +30,7 @@ using System.Collections.Generic; using System.IO; using System.IO.Compression; using System.Reflection; +using System.Runtime; using System.Text.RegularExpressions; using System.Threading; using System.Xml; @@ -216,6 +217,12 @@ namespace OpenSim.Region.CoreModules.World.Archiver CloseArchive(e.Message); throw; } + + GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce; + GC.Collect(); + GC.WaitForPendingFinalizers(); + GC.Collect(); + GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.Default; } private void ArchiveOneRegion(Scene scene, string regionDir, Dictionary assetUuids, @@ -282,6 +289,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver assetGatherer.GatherAll(); + GC.Collect(); int errors = assetGatherer.FailedUUIDs.Count; m_log.DebugFormat( "[ARCHIVER]: {0} region scene objects to save reference {1} possible assets", @@ -313,6 +321,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver assetUuids[regionSettings.TerrainTexture4] = (sbyte)AssetType.Texture; Save(scene, sceneObjects, regionDir); + GC.Collect(); } /// diff --git a/OpenSim/Region/CoreModules/World/Archiver/AssetsRequest.cs b/OpenSim/Region/CoreModules/World/Archiver/AssetsRequest.cs index 91f4dc3..6e81025 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/AssetsRequest.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/AssetsRequest.cs @@ -133,6 +133,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver m_timeOutTimer .AutoReset = false; m_timeOutTimer.Elapsed += OnTimeout; m_timeout = false; + int gccontrol = 0; foreach (KeyValuePair kvp in m_uuids) { @@ -161,6 +162,11 @@ namespace OpenSim.Region.CoreModules.World.Archiver m_foundAssetUuids.Add(asset.FullID); m_assetsArchiver.WriteAsset(PostProcess(asset)); + if(++gccontrol > 5000) + { + gccontrol = 0; + GC.Collect(); + } } catch (Exception e) @@ -180,6 +186,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver m_log.DebugFormat("[ARCHIVER]: Successfully added {0} assets ({1} of total possible assets requested were not found, were damaged or were not assets)", m_foundAssetUuids.Count, totalerrors); + GC.Collect(); PerformAssetsRequestCallback(m_timeout); } -- cgit v1.1