【发布时间】:2012-07-09 11:40:00
【问题描述】:
我想知道改进我的 WPF 应用程序的最佳解决方案是什么。
我知道 WPF 会强制您在创建 UI 的线程上完成所有 UI 工作。这对我来说是个大问题,因为我的 UI 非常大,而且我只有 1 个窗口,所以我不能每个窗口拆分 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...
我在不同的网站上找到了他们谈论这个的地方......但没有回答我的问题:
【问题讨论】:
-
我在某处读到 UI 对象可以在不同的线程上创建。我需要找出答案。否则我认为 Kent 关于虚拟化的建议值得一看。
-
1.5GB.. Top3 内存消耗对象类型是什么? (需要内存分析)。
-
看看我的question。有一些很好的提示可以提高 UI 的响应能力。
-
速度更快的机器,配备游戏级显卡。
-
但是所有的工作都是由 CPU 完成的,显卡什么也不做,是的,我是 tier 2....
标签: c# .net wpf multithreading performance