@@ -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