【发布时间】:2012-05-01 15:28:22
【问题描述】:
我们有一个客户端-服务器 C# 应用程序,当我们使用一些脚本在 UI 中创建 1000 个或更多种类的对象时,它会冻结,而不是在 UI 中单独创建它。
我们为某些事件使用了很多事件处理程序,但据我了解,所有线程(UI 和后台)和事件处理程序都在正确管理。然后我们的客户端应用程序也会冻结。我们不知道它背后的确切原因是什么。 高峰时间挂起应用程序占用了大约 16 个线程。任务管理器报告它占用了超过 90% 的 CPU 时间。
谁能告诉我背后的原因
[STAThread]
static void Main()
{
try
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.DoEvents();
Application.Run(new Test());
}
更新
我如何将延迟加载应用到 Treeview、Listview 和 propertygrid。我使用了 beginupdate、endupdate、双缓冲,除了这些任何方法??
更新
高 CPU 使用率是什么意思,我的应用程序 exe 以 13 个线程挂起,在某些地方我听说如果您使用 ThreadPriority.Lowest 它会降低 CPU 使用率,它还能工作吗?我不知道在哪里正确使用它?
【问题讨论】:
-
它会“解冻”,还是永远“冻结”?
-
根据给出的信息,我们只能猜测。您可能会用完 GUI 资源。
-
尝试创建问题的最小再现,然后发布代码。事实上,我们仅限于猜测。
-
这些对象是控件吗?听起来像是延迟加载的好选择,即在用户向下滚动页面时按需加载项目。
-
前端是WPF还是Winforms?如果 WPF(并假设问题在于创建数千个控件),那么您可以使用 WPF 容器,该容器使用虚拟化堆栈面板(如带有 DataTemplate 的列表框)来处理 James Johnson 所写的控件的延迟加载在他的评论中。
标签: c# .net multithreading event-handling