From 800de1952381f8c42b1673b26aca8c7101041493 Mon Sep 17 00:00:00 2001 From: Chris Jacobsen Work Date: Mon, 20 Nov 2023 14:33:17 -0500 Subject: [PATCH 1/2] Fix for memory leak in AD virtual list view --- BLAZAM/BLAZAM.csproj | 2 +- BLAZAM/Pages/Computers/ViewComputer.razor | 15 --------------- BLAZAMActiveDirectory/Adapters/ADComputer.cs | 14 +++++++++++--- BLAZAMActiveDirectory/Searchers/ADSearch.cs | 14 ++++++++++---- 4 files changed, 22 insertions(+), 23 deletions(-) diff --git a/BLAZAM/BLAZAM.csproj b/BLAZAM/BLAZAM.csproj index 7ed7d103..6a581386 100644 --- a/BLAZAM/BLAZAM.csproj +++ b/BLAZAM/BLAZAM.csproj @@ -6,7 +6,7 @@ enable false 0.8.5 - 2023.11.20.1820 + 2023.11.20.1930 BLAZAM False diff --git a/BLAZAM/Pages/Computers/ViewComputer.razor b/BLAZAM/Pages/Computers/ViewComputer.razor index 8bf2be2e..5f0fd74a 100644 --- a/BLAZAM/Pages/Computers/ViewComputer.razor +++ b/BLAZAM/Pages/Computers/ViewComputer.razor @@ -150,25 +150,10 @@ await InvokeAsync(StateHasChanged); if (Computer != null) { - - Task.Run(() => - { - var services = Computer.Services; - - RefreshEntryComponents(); - - }); - - - - Computer.OnOnlineChanged += ((online) => { RefreshEntryComponents(); }); - - - } LoadingData = false; await RefreshEntryComponents(); diff --git a/BLAZAMActiveDirectory/Adapters/ADComputer.cs b/BLAZAMActiveDirectory/Adapters/ADComputer.cs index 3912c1b3..205bd753 100644 --- a/BLAZAMActiveDirectory/Adapters/ADComputer.cs +++ b/BLAZAMActiveDirectory/Adapters/ADComputer.cs @@ -7,6 +7,7 @@ using BLAZAM.ActiveDirectory.Interfaces; using BLAZAM.Database.Models; using System.Net.Sockets; +using System.DirectoryServices; namespace BLAZAM.ActiveDirectory.Adapters { @@ -26,7 +27,7 @@ private WmiConnection? wmiConnection private bool? online; public ADComputer() { - MonitorOnlineStatus(); + } public string? OperatingSystem @@ -59,7 +60,7 @@ public virtual bool? IsOnline } } public List Services => wmiConnection.Services; - public ComputerMemory Memory =>wmiConnection?.Memory ?? new(); + public ComputerMemory Memory => wmiConnection?.Memory ?? new(); public int Processor => wmiConnection.Processor; public double MemoryUsedPercent => wmiConnection.Memory.PercentUsed; public List GetDrives() @@ -168,7 +169,7 @@ await Task.Run(() => } while (x < retries); } - catch(SocketException ex) + catch (SocketException ex) { } @@ -187,6 +188,13 @@ await Task.Run(() => } + public override async Task Parse(SearchResult result, IActiveDirectoryContext directory) + { + await base.Parse(result, directory); + if (!this.IsDeleted) + MonitorOnlineStatus(); + } + public override void Dispose() { base.Dispose(); diff --git a/BLAZAMActiveDirectory/Searchers/ADSearch.cs b/BLAZAMActiveDirectory/Searchers/ADSearch.cs index 26c69ff2..c7d60275 100644 --- a/BLAZAMActiveDirectory/Searchers/ADSearch.cs +++ b/BLAZAMActiveDirectory/Searchers/ADSearch.cs @@ -15,6 +15,7 @@ using System.ComponentModel; using System.DirectoryServices; using System.DirectoryServices.Protocols; +using System.Drawing.Printing; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -61,7 +62,9 @@ public class ADSearch : SearchBase /// to confirm search is completed and no more results are coming. /// public AppEvent> ResultsCollected { get; set; } - + + int PageSize = 40; + public ActiveDirectoryObjectType? ObjectTypeFilter { get; set; } public bool? EnabledOnly { get; set; } public int MaxResults { get; set; } = 50; @@ -106,7 +109,7 @@ public async Task> SearchAsync() { SearchRoot ??= ActiveDirectoryContext.Instance.GetDirectoryEntry(DatabaseCache.ActiveDirectorySettings?.ApplicationBaseDN); var pageOffset = 1; - var pageSize = 40; + searcher = new DirectorySearcher(SearchRoot) { //TODO Ensure bbroken @@ -214,7 +217,7 @@ public async Task> SearchAsync() SearchTime = DateTime.Now - startTime; - PerformSearch(startTime, searcher, pageSize); + PerformSearch(startTime, searcher, PageSize); if (cancellationToken?.IsCancellationRequested == true) return new(); @@ -298,7 +301,7 @@ private DateTime NewMethod() // throw new ApplicationException("The searcher lost it's VirtualListView in the middle of searching!"); lastResults = searcher.FindAll(); AddResults(lastResults); - if (lastResults.Count < pageSize) + if (searcher.VirtualListView==null || lastResults.Count < pageSize) moreResults = false; SearchTime = DateTime.Now - startTime; @@ -319,7 +322,10 @@ private void PrepareSearcher(DirectorySearcher searcher) searcher.PropertiesToLoad.Add("name"); } if (SearchDeleted) + { searcher.Tombstone = true; + searcher.VirtualListView = new DirectoryVirtualListView(0, PageSize - 1, 1); + } //searcher.Asynchronous = true; searcher.SizeLimit = MaxResults; searcher.Filter = searcher.Filter?.Substring(0, searcher.Filter.Length - 1) + FilterQuery + ")"; From 259093e4f4b8aadb49ae2ef69e090cce477b5484 Mon Sep 17 00:00:00 2001 From: Chris Jacobsen Work Date: Mon, 20 Nov 2023 14:40:04 -0500 Subject: [PATCH 2/2] Update build number --- BLAZAM/BLAZAM.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BLAZAM/BLAZAM.csproj b/BLAZAM/BLAZAM.csproj index 6a581386..5d60d40d 100644 --- a/BLAZAM/BLAZAM.csproj +++ b/BLAZAM/BLAZAM.csproj @@ -6,7 +6,7 @@ enable false 0.8.5 - 2023.11.20.1930 + 2023.11.20.1939 BLAZAM False