From d9247de1c4e6d3e26b24e034765a38fd05c295f9 Mon Sep 17 00:00:00 2001 From: dexyfex Date: Sat, 25 Nov 2017 16:01:56 +1100 Subject: [PATCH] RenderableCache performance improvement, Unknown scenario class types included, Multi-export XML fix --- ExploreForm.cs | 2 +- Rendering/RenderableCache.cs | 16 ++++++++-------- World/Scenarios.cs | 1 + 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/ExploreForm.cs b/ExploreForm.cs index e20e075..397571e 100644 --- a/ExploreForm.cs +++ b/ExploreForm.cs @@ -504,7 +504,7 @@ namespace CodeWalker isitem = true; isfile = isfile || (file.Folder == null); canview = canview || CanViewFile(file); - + canexportxml = canexportxml || CanExportXml(file); } } str += ", " + sc.ToString() + " selected"; diff --git a/Rendering/RenderableCache.cs b/Rendering/RenderableCache.cs index be00618..635ff57 100644 --- a/Rendering/RenderableCache.cs +++ b/Rendering/RenderableCache.cs @@ -16,8 +16,8 @@ namespace CodeWalker.Rendering { public class RenderableCache { - public DateTime LastUpdate = DateTime.Now; - public DateTime LastUnload = DateTime.Now; + public DateTime LastUpdate = DateTime.UtcNow; + public DateTime LastUnload = DateTime.UtcNow; public double CacheTime = Settings.Default.GPUCacheTime;// 10.0; //seconds to keep something that's not used public double UnloadTime = Settings.Default.GPUCacheFlushTime;// 0.1; //seconds between running unload cycles public int MaxItemsPerLoop = 1; //to keep things flowing @@ -119,7 +119,7 @@ namespace CodeWalker.Rendering //todo: change this to unload only when necessary (ie when something is loaded) - var now = DateTime.Now; + var now = DateTime.UtcNow; var deltat = (now - LastUpdate).TotalSeconds; var unloadt = (now - LastUnload).TotalSeconds; if ((unloadt > UnloadTime) && (deltat < 0.25)) //don't try the unload on every loop... or when really busy @@ -134,11 +134,11 @@ namespace CodeWalker.Rendering pathbatches.UnloadProc(); waterquads.UnloadProc(); - LastUnload = DateTime.Now; + LastUnload = DateTime.UtcNow; } - LastUpdate = DateTime.Now; + LastUpdate = DateTime.UtcNow; Monitor.Exit(updateSyncRoot); } @@ -293,7 +293,7 @@ namespace CodeWalker.Rendering public void UnloadProc() { //unload items that haven't been used in longer than the cache period. - var now = DateTime.Now; + var now = DateTime.UtcNow; var rnode = loadeditems.First; while (rnode != null) { @@ -339,7 +339,7 @@ namespace CodeWalker.Rendering item.Init(key); cacheitems.Add(key, item); } - Interlocked.Exchange(ref item.LastUseTime, DateTime.Now.ToBinary()); + Interlocked.Exchange(ref item.LastUseTime, DateTime.UtcNow.ToBinary()); if ((!item.IsLoaded) && (!item.LoadQueued))// || { item.LoadQueued = true; @@ -364,7 +364,7 @@ namespace CodeWalker.Rendering item.Unload(); item.LoadQueued = false; Interlocked.Add(ref CacheUse, -item.DataSize); - Interlocked.Exchange(ref item.LastUseTime, DateTime.Now.AddHours(-1).ToBinary()); + Interlocked.Exchange(ref item.LastUseTime, DateTime.UtcNow.AddHours(-1).ToBinary()); loadeditems.Remove(item);//slow... } diff --git a/World/Scenarios.cs b/World/Scenarios.cs index d8018df..3e560e7 100644 --- a/World/Scenarios.cs +++ b/World/Scenarios.cs @@ -1570,6 +1570,7 @@ namespace CodeWalker.World typeobj.IsVehicle = true; break; default: + typeobj = new ScenarioType(); break; }