Do not keep map pakages loaded on Game start to reduce memory impact

This commit is contained in:
chacha
2024-04-24 13:27:20 +02:00
committed by Gustas
parent affc98851c
commit e5a7b6e795
6 changed files with 30 additions and 10 deletions

View File

@@ -174,7 +174,19 @@ namespace OpenRA
readonly ModData modData;
public readonly string Uid;
public IReadOnlyPackage Package { get; private set; }
public string PackageName { get; private set; }
IReadOnlyPackage package;
public IReadOnlyPackage Package
{
get
{
package ??= parentPackage.OpenPackage(PackageName, modData.ModFiles);
return package;
}
private set => package = value;
}
IReadOnlyPackage parentPackage;
volatile InnerData innerData;
@@ -286,7 +298,7 @@ namespace OpenRA
cache = modData.MapCache;
Uid = map.Uid;
Package = map.Package;
PackageName = map.Package.Name;
var mapPlayers = new MapPlayers(map.PlayerDefinitions);
var spawns = new List<CPos>();
@@ -338,7 +350,7 @@ namespace OpenRA
yaml = new MiniYaml(null, MiniYaml.FromStream(yamlStream, $"{p.Name}:map.yaml", stringPool: cache.StringPool)).ToDictionary();
}
Package = p;
PackageName = p.Name;
parentPackage = parent;
var newData = innerData.Clone();
@@ -587,10 +599,15 @@ namespace OpenRA
public void Dispose()
{
if (Package != null)
DisposePackage();
}
public void DisposePackage()
{
if (package != null)
{
Package.Dispose();
Package = null;
package.Dispose();
package = null;
}
}