我想知道如何改进我的WPF应用程序,最好的解决方案是什么。
我知道WPF强制要求在创建UI的线程上完成所有UI工作。这对我来说是一个很大的问题,因为我的UI非常庞大,而我只有一个窗口,所以我无法为每个窗口分配1个线程。
当我进行平移和缩放时,每次都需要刷新所有内容,其中一个CPU使用率达到100%,直到所有内容都完成。
所以我会尝试解释一下我的应用程序:
- 1个窗口(屏幕大小) - 虚拟面板,12000像素X 12000像素(我在其中进行平移和缩放) - 约2000个控件(按钮、开关和其他一些复杂的控件) - 在我的控件后面,我有一个大的位图作为背景,但我将我的背景分成了大约100个更小的位图,然后堆叠起来(因为1个12k像素x 12k像素的位图会导致我的应用程序崩溃) - 10个虚拟显示器,连接到远程计算机(提供位图),并且每50毫秒刷新其内容 - .NET 4.0,多点触控应用程序
我知道WPF强制要求在创建UI的线程上完成所有UI工作。这对我来说是一个很大的问题,因为我的UI非常庞大,而我只有一个窗口,所以我无法为每个窗口分配1个线程。
当我进行平移和缩放时,每次都需要刷新所有内容,其中一个CPU使用率达到100%,直到所有内容都完成。
所以我会尝试解释一下我的应用程序:
- 1个窗口(屏幕大小) - 虚拟面板,12000像素X 12000像素(我在其中进行平移和缩放) - 约2000个控件(按钮、开关和其他一些复杂的控件) - 在我的控件后面,我有一个大的位图作为背景,但我将我的背景分成了大约100个更小的位图,然后堆叠起来(因为1个12k像素x 12k像素的位图会导致我的应用程序崩溃) - 10个虚拟显示器,连接到远程计算机(提供位图),并且每50毫秒刷新其内容 - .NET 4.0,多点触控应用程序
我的应用程序可以进行平移和缩放(不使用10个显示器),但由于控件数量太多,存在很多延迟,当我添加显示器时,延迟会翻倍...
我的应用程序大约占用1.5 GB的虚拟内存。
我尝试使用调度程序在需要时创建线程,但我找不到想要的内容... 他们到处都在谈论1个线程/窗口... 但我只有1个窗口,不知道该怎么办。
- 我不能将其拆分为较小的窗口。
- 我不能减少控件数量或刷新时间。
- 我不能更改技术(WPF)
所以这是真正的问题:我在哪里可以创建新线程来帮助我的渲染时间?将工作分配给不同的CPU...
我找到了一些网站,他们谈论这个问题... 但没有回答我的问题: