Skip to content

Commit 5640cf0

Browse files
author
Jim.Jiang
committed
support filter
1 parent 92af83c commit 5640cf0

File tree

3 files changed

+49
-32
lines changed

3 files changed

+49
-32
lines changed

src/DotnetDumpMonitor/DotnetDumpMonitor.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
<ItemGroup>
1111
<PackageReference Include="CliWrap" Version="3.6.0" />
1212
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.0.0" />
13+
<PackageReference Include="DataGridExtensions" Version="2.5.14" />
1314
<PackageReference Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.39" />
1415
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
1516
</ItemGroup>

src/DotnetDumpMonitor/MainWindow.xaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
55
xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
66
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
7+
xmlns:dgx="urn:tom-englert.de/DataGridExtensions"
78
xmlns:local="clr-namespace:DotnetDumpMonitor"
89
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
910
xmlns:vm="clr-namespace:DotnetDumpMonitor.ViewModels"
@@ -27,6 +28,13 @@
2728
<Button
2829
Height="25"
2930
Margin="10,0,10,0"
31+
Command="{Binding ResetBaseCommand}"
32+
Content="Reset base"
33+
DockPanel.Dock="Right"
34+
IsEnabled="{Binding ProcessesLoaded}" />
35+
<Button
36+
Height="25"
37+
Margin="10,0,0,0"
3038
Command="{Binding SetCurrentAsBaseCommand}"
3139
Content="Set current as base"
3240
DockPanel.Dock="Right"
@@ -45,6 +53,7 @@
4553
</DockPanel>
4654
<DataGrid
4755
Height="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Grid}, Path=ActualHeight}"
56+
dgx:DataGridFilter.IsAutoFilterEnabled="True"
4857
AutoGenerateColumns="False"
4958
EnableRowVirtualization="True"
5059
IsReadOnly="True"

src/DotnetDumpMonitor/ViewModels/MainWindowViewModel.cs

Lines changed: 39 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,8 @@ private async Task InitWindow()
9494
[RelayCommand]
9595
private async Task RefreshProcesses()
9696
{
97-
_lastObjectDumpInfos = null;
98-
_baseObjectDumpInfos = null;
97+
Clean();
9998
SelectProcess = null;
100-
DiffObjectDumpInfos.Clear();
10199
Processes.Clear();
102100
var cmd = await Cli.Wrap("dotnet-gcdump")
103101
.WithArguments(args => args
@@ -126,6 +124,18 @@ private async Task SetCurrentAsBase()
126124
Log.Logger.Information("SetCurrentAsBase");
127125
}
128126

127+
[RelayCommand]
128+
private async Task ResetBase()
129+
{
130+
_baseObjectDumpInfos = null;
131+
if (SelectProcess == null)
132+
{
133+
return;
134+
}
135+
await RefreshObjectDumpInfos(SelectProcess);
136+
Log.Logger.Information("SetCurrentAsBase");
137+
}
138+
129139
public async Task RefreshObjectDumpInfos(ProcessDumpInfo processDumpInfo)
130140
{
131141
List<string> lines = new();
@@ -141,7 +151,6 @@ public async Task RefreshObjectDumpInfos(ProcessDumpInfo processDumpInfo)
141151
}))
142152
.WithValidation(CommandResultValidation.None)
143153
.ExecuteAsync();
144-
145154
var objectDumpInfos = lines
146155
//" 3,882,796 GC Heap bytes"
147156
//" 48,015 GC Heap objects"
@@ -164,43 +173,33 @@ public async Task RefreshObjectDumpInfos(ProcessDumpInfo processDumpInfo)
164173
return null;
165174
})
166175
.Where(x => x != null)
167-
.Cast<ObjectDumpInfo>()
168-
.Where(a => a.Lib.Contains("RoomsHost"));
176+
.Cast<ObjectDumpInfo>();
177+
//.Where(a => a.Lib.Contains("RoomsHost"));
169178

170179

171180
_lastObjectDumpInfos = objectDumpInfos;
172181

173-
if (_baseObjectDumpInfos == null)
174-
{
175-
_baseObjectDumpInfos = objectDumpInfos;
176-
}
177-
else
182+
var diffObjectDumpInfos = await Task.Run(() =>
178183
{
179-
var diffObjectDumpInfos = await Task.Run(() =>
184+
List<ObjectDumpInfo> insideDiffObjectDumpInfos = new();
185+
foreach (var objectDumpInfo in objectDumpInfos)
180186
{
181-
List<ObjectDumpInfo> insideDiffObjectDumpInfos = new();
182-
foreach (var objectDumpInfo in objectDumpInfos)
187+
var lastObjectDumpInfo = _baseObjectDumpInfos?.FirstOrDefault(x => x.Lib == objectDumpInfo.Lib && x.Name == objectDumpInfo.Name);
188+
if (lastObjectDumpInfo == null || lastObjectDumpInfo.Count < objectDumpInfo.Count)
183189
{
184-
var lastObjectDumpInfo = _baseObjectDumpInfos?.FirstOrDefault(x => x.Lib == objectDumpInfo.Lib && x.Name == objectDumpInfo.Name);
185-
if (lastObjectDumpInfo == null || lastObjectDumpInfo.Count < objectDumpInfo.Count)
186-
{
187-
if (objectDumpInfo.Count >= 1)
188-
{
189-
insideDiffObjectDumpInfos.Add(objectDumpInfo);
190-
}
191-
}
190+
insideDiffObjectDumpInfos.Add(objectDumpInfo);
192191
}
193-
return insideDiffObjectDumpInfos;
194-
});
195-
DiffObjectDumpInfos.Clear();
196-
if (!ProcessesLoaded)
197-
{
198-
return;
199-
}
200-
foreach (var objectDumpInfo in diffObjectDumpInfos)
201-
{
202-
DiffObjectDumpInfos.Add(objectDumpInfo);
203192
}
193+
return insideDiffObjectDumpInfos;
194+
});
195+
DiffObjectDumpInfos.Clear();
196+
if (!ProcessesLoaded || processDumpInfo != SelectProcess)
197+
{
198+
return;
199+
}
200+
foreach (var objectDumpInfo in diffObjectDumpInfos)
201+
{
202+
DiffObjectDumpInfos.Add(objectDumpInfo);
204203
}
205204
}
206205

@@ -211,7 +210,15 @@ async partial void OnSelectProcessChanged(ProcessDumpInfo? value)
211210
{
212211
return;
213212
}
213+
Clean();
214214
await RefreshObjectDumpInfos(value);
215215
}
216+
217+
private void Clean()
218+
{
219+
_lastObjectDumpInfos = null;
220+
_baseObjectDumpInfos = null;
221+
DiffObjectDumpInfos.Clear();
222+
}
216223
}
217224
}

0 commit comments

Comments
 (0)