C# 重载应用程序冻结

C# 重载应用程序冻结,c#,.net,multithreading,event-handling,C#,.net,Multithreading,Event Handling,我们有一个客户机-服务器C#应用程序,当我们使用一些脚本在UI中创建1000种或更多类型的对象时,它会冻结,而不是单独在UI中创建它 对于某些事件,我们使用了很多事件处理程序,但据我所知,所有线程(UI和后台)和事件处理程序都能正常管理。然后我们的客户端应用程序也会冻结。我们不知道背后的确切原因是什么。 挂起应用程序的峰值时间约为16个线程。任务管理器报告它占用了90%以上的CPU时间 有人能告诉我背后的原因吗 [STAThread] static void Main()

我们有一个客户机-服务器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。最低的
会降低CPU利用率,它还能工作吗?我不知道在哪里正确使用它???

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

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


TreeView和ListView本身效率不高,而且没有添加大量逻辑。如果您没有时间选择它们,您可能想查看第三方解决方案,如惊人的开源ObjectListView

它有几种风格来处理特定情况,比如处理数百万条记录的FastObjectListView或处理继承权的TreeListView

它确实需要一点努力才能掌握,但距离将TreeView和ListView变成。。那么ObjectListViews:D

我自己也在一些项目中使用过它,并取得了巨大的成功


干杯,

它曾经“解冻”过,还是永远“冻结”过?根据给出的信息,我们只能猜测。您的GUI资源可能已用完。请尝试将问题复制到最低限度,然后发布代码。事实上,我们仅限于猜测。这些对象是控件吗?听起来很适合延迟加载,即在用户向下滚动页面时按需加载项目。前端是WPF还是Winforms?如果是WPF(假设问题是创建数千个控件),那么您可以使用WPF容器,该容器使用虚拟化堆栈面板(如带有数据模板的列表框)来处理James Johnson在其评论中提到的控件的延迟加载,并通过我的应用程序验证了几乎所有这些功能都已使用。但当通过任何脚本或任何bat文件或通过名为pipe的操作系统创建突发对象时,它仍然处于挂起状态。这段时间占用了超过90%的CPU时间。当对象正在创建某种自动化时,还有一件事我如何才能将延迟加载应用到Treeview、Listview和propertygrid。我使用过beginupdate、endupdate、双缓冲,除了这些方法之外??高CPU利用率意味着什么,我的应用程序exe挂起了13个线程,我听说如果使用ThreadPriority,它会降低CPU利用率,还能工作吗我不知道在哪里正确使用它高CPU利用率意味着什么,我的应用程序exe挂起了13个线程,我听说如果你使用ThreadPriority,它会降低CPU利用率,它还能工作吗?我不知道在哪里正确使用它