From 28c14f979bdb9d1ab437a3b82aeff2d71237c833 Mon Sep 17 00:00:00 2001 From: Mustafa Bal Date: Wed, 1 Apr 2020 14:37:13 -0700 Subject: [PATCH 1/2] Removing unused IHosts --- src/Microsoft.ML.Core/Environment/HostEnvironmentBase.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/Microsoft.ML.Core/Environment/HostEnvironmentBase.cs b/src/Microsoft.ML.Core/Environment/HostEnvironmentBase.cs index f776b08f56..3090a4e5a5 100644 --- a/src/Microsoft.ML.Core/Environment/HostEnvironmentBase.cs +++ b/src/Microsoft.ML.Core/Environment/HostEnvironmentBase.cs @@ -127,8 +127,14 @@ public HostBase(HostEnvironmentBase source, string shortName, string paren Depth = source.Depth + 1; } + /// + /// This method registers and returns the host for the calling component. The generated host is also + /// added to and encapsulated by . It becomes + /// necessary to remove these hosts when they are reclaimed by the Garbage Collector. + /// public new IHost Register(string name, int? seed = null, bool? verbose = null) { + _children.RemoveAll(r => r.TryGetTarget(out IHost _) == false); Contracts.CheckNonEmpty(name, nameof(name)); IHost host; lock (_cancelLock) From 4c54ff61d71cb4976a6172b9e95aa9b76d98d4d1 Mon Sep 17 00:00:00 2001 From: Mustafa Bal Date: Wed, 1 Apr 2020 19:22:33 -0700 Subject: [PATCH 2/2] Removed unused hosts in both Register methods --- src/Microsoft.ML.Core/Environment/HostEnvironmentBase.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.ML.Core/Environment/HostEnvironmentBase.cs b/src/Microsoft.ML.Core/Environment/HostEnvironmentBase.cs index 3090a4e5a5..4a3efeec3d 100644 --- a/src/Microsoft.ML.Core/Environment/HostEnvironmentBase.cs +++ b/src/Microsoft.ML.Core/Environment/HostEnvironmentBase.cs @@ -134,11 +134,11 @@ public HostBase(HostEnvironmentBase source, string shortName, string paren /// public new IHost Register(string name, int? seed = null, bool? verbose = null) { - _children.RemoveAll(r => r.TryGetTarget(out IHost _) == false); Contracts.CheckNonEmpty(name, nameof(name)); IHost host; lock (_cancelLock) { + _children.RemoveAll(r => r.TryGetTarget(out IHost _) == false); Random rand = (seed.HasValue) ? RandomUtils.Create(seed.Value) : RandomUtils.Create(_rand); host = RegisterCore(this, name, Master?.FullName, rand, verbose ?? Verbose); if (!IsCanceled) @@ -391,12 +391,18 @@ protected HostEnvironmentBase(HostEnvironmentBase source, Random rand, boo _children = new List>(); } + /// + /// This method registers and returns the host for the calling component. The generated host is also + /// added to and encapsulated by . It becomes + /// necessary to remove these hosts when they are reclaimed by the Garbage Collector. + /// public IHost Register(string name, int? seed = null, bool? verbose = null) { Contracts.CheckNonEmpty(name, nameof(name)); IHost host; lock (_cancelLock) { + _children.RemoveAll(r => r.TryGetTarget(out IHost _) == false); Random rand = (seed.HasValue) ? RandomUtils.Create(seed.Value) : RandomUtils.Create(_rand); host = RegisterCore(this, name, Master?.FullName, rand, verbose ?? Verbose); _children.Add(new WeakReference(host));