2

我们有一个客户端-服务器 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 使用率,它还能工作吗?我不知道在哪里正确使用它?

4

2 回答 2

2

听起来您需要某种延迟加载技术来在用户向下滚动表单时按需加载控件。一次加载这么多控件将不可避免地锁定应用程序。

本文提供了一些关于如何提高 winform 应用程序性能的好技巧:

于 2012-05-01T15:52:56.663 回答
0

Treeviews 和 Listviews 本身效率不高,并且没有添加大量逻辑。如果您没有时间优化它们,您可能需要查看 3rd 方解决方案,例如 AMAZING 开源 ObjectListView。

它有几种处理特定情况的方式,例如处理数百万条记录的 FastObjectListView 或处理层次结构的 TreeListView!

掌握它确实需要一些努力,但远不及将 Treeviews 和 Listviews 制作成..以及 ObjectListViews 所需的东西: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

我自己在几个项目中使用它并取得了巨大的成功!!

干杯,

于 2012-05-04T17:00:38.737 回答