gpt4 book ai didi

c# - GUI何时过载?

转载 作者:行者123 更新时间:2023-11-30 14:14:44 26 4
gpt4 key购买 nike

假设您永久使用异步调用UI线程/调度程序的方法

while (true) {

uiDispatcher.BeginInvoke(new Action<int, T>(insert_), DispatcherPriority.Normal, new object[] { });
}

在程序的每次运行中,您都会观察到应用程序的 GUI 在大约 90 秒后由于大量调用 开始卡住(时间各不相同,但大致在 1 到 2 分钟之间)。

如何才能准确地确定(测量?)这种重载发生的时间点,以便及早停止它?

附录一:

在我的实际程序中,我没有无限循环。我有一个在终止前迭代数百次的算法。在每次迭代中,我都将一个字符串添加到我的 WPF 应用程序中的列表控件中。我使用了 while (true) { ... } 结构,因为它最符合所发生的情况。事实上,算法正确终止并且所有(数百个)字符串都正确添加到我的列表中,但一段时间后我失去了使用 GUI 的能力,直到算法终止 - 然后 GUI 再次响应。

附录二:

我的程序的目的是在运行时观察特定算法。我添加的字符串是日志条目:每次迭代一个日志字符串。我调用这些添加操作的原因是算法在 UI 线程之外的另一个线程中运行。为了 catch 我无法从 UI 线程以外的任何线程进行 UI 操作这一事实,我构建了某种 ThreadSafeObservableCollection(但我很确定这段代码不值得发布,因为它会影响实际问题我认为是 UI 无法处理方法的重复快速调用。

最佳答案

这很简单:当您让用户的眼球重载时,您就做错了。就现代 cpu 内核而言,这种情况发生得非常快,超过每秒 20 次更新,显示的信息就开始变得模糊。电影院利用了一些优势,电影以每秒 24 帧的速度播放。

任何比这更快的更新都只是在浪费资源。在 UI 线程开始弯曲之前,您仍然有大量的喘息空间。这取决于您要求它完成的工作量,但通常是 x50 安全裕度。基于 Environment.TickCount 的简单计时器将完成工作,当差异 >= 45 毫秒时触发更新。

关于c# - GUI何时过载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11320156/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com