【发布时间】:2017-02-13 12:29:39
【问题描述】:
我没有手动摆弄 DispatcherTimer,而是想出了这个:
public async void StartWatching()
{
Debug.Assert(SynchronizationContext.Current is DispatcherSynchronizationContext, "SynchronizationContext.Current is DispatcherSynchronizationContext");
while ( true )
{
this.GC0 = GC.CollectionCount(0);
this.GC1 = GC.CollectionCount(1);
this.GC2 = GC.CollectionCount(2);
this.RAM = GC.GetTotalMemory(false);
await Task.Delay(1500);
}
}
这段代码不是垃圾收集,只是在状态栏上显示统计信息。
这会启动一次(从 Application.OnStartup 内部),旨在为整个应用程序运行时运行。
单个问题
长期(数周)运行时我会遇到任何麻烦吗?
【问题讨论】:
-
为什么您需要手动启动垃圾回收?
-
@MikeEason 我只是在状态栏上显示统计数据。
-
定时器的问题在哪里?这是计时器的用例,为什么需要替代方案?
-
嗯,你特别在做一些会消耗资源(不必要的)的事情,每 1.5 秒,这会降低你的应用程序的性能。
-
@JeffRSon 如果我将
Debug.Assert重写为SynchronizationContext.Current != null,则代码变得与技术无关,并且可以跨 WPF、Winforms、Xamarin、Mobile 等使用。
标签: .net wpf async-await