我们有一个客户端-服务器 C# 应用程序,当我们使用某些脚本而不是在 UI 中单独创建 UI 中创建 1000 种或更多类型的对象时,该应用程序会冻结。
我们正在为某些事件使用大量事件处理程序,但根据我的理解,所有线程(UI 和背景(和事件处理程序都得到了妥善管理。然后我们的客户端应用程序也会冻结。我们不知道背后的确切原因是什么. 高峰时间挂起应用程序大约需要 16 个线程。 任务管理器报告它占用超过 90% 的 CPU 时间。
谁能告诉我背后的原因
[STAThread]
static void Main()
{
try
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.DoEvents();
Application.Run(new Test());
}
更新
如何向树视图、列表视图和属性网格进行延迟加载。我使用了开始更新,结束更新,双缓冲,除了这些任何方法??
更新
高 CPU 利用率是什么意思,我的应用程序 exe 挂有 13 个线程,我听说如果你使用 ThreadPriority.Lowest
它会降低 CPU 利用率,它仍然会工作我不知道在哪里正确使用它吗?
听起来您需要某种延迟加载技术,以便在用户向下滚动窗体时按需加载控件。一次加载如此多的控件将不可避免地锁定应用程序。
本文提供了一些有关如何提高winform 应用程序性能的好提示:
- 提高 Windows 窗体应用程序性能的实用技巧
树视图和列表视图本身效率不高,并且没有添加大量逻辑。如果您没有时间优化它们,您可能需要查看第三方解决方案,例如惊人的开源 ObjectListView。
它有几种处理特定情况的风格,例如处理数百万条记录的 FastObjectListView 或处理层次结构的 TreeListView!
掌握确实需要一些努力,但远不及将Treeviews和Listviews变成..wellObjectListViews:D
http://objectlistview.sourceforge.net
http://objectlistview.sourceforge.net/cs/recipes.html#what-flavour-of-objectlistview-do-i-want-to-use
http://objectlistview.sourceforge.net/cs/recipes.html
http://objectlistview.sourceforge.net/cs/gettingStarted.html
我自己在几个项目中使用它,取得了巨大的成功!!
干杯