重载应用程序冻结

时间:2012-05-01 15:28:22

标签: c# .net multithreading event-handling

我们有一个客户端 - 服务器C#应用程序,当我们通过使用一些脚本而不是在UI中单独创建它时,在UI中创建1000种以上的对象时会冻结。

我们正在为某些事件使用大量事件处理程序,但根据我的理解,所有线程(UI和背景)和事件处理程序都正确管理。然后我们的客户端应用程序冻结。我们不知道它背后的确切原因。  高峰时间挂起应用大约需要16个线程。任务管理器报告它占用了超过90%的CPU时间。

任何人都可以告诉我背后的原因

   [STAThread]
    static void Main()
    {
        try
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.DoEvents();
            Application.Run(new Test());
        }

更新

我怎样才能将延迟加载到Treeview,Listview和propertygrid.I使用了beginupdate,endupdate,double buffering,除了这些任何方法?

更新

高CPU利用率意味着什么,我的应用程序exe挂起了13个线程,有些地方我听说如果你使用ThreadPriority.Lowest它会降低CPU利用率,它会工作还是我不知道在哪里正确使用它??

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

Treeviews和Listviews本身并不是很有效,也没有添加大量逻辑。如果您没有时间来表达它们,您可能需要查看第三方解决方案,例如AMAZING开源ObjectListView。

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

掌握它确实需要花费一些精力,但是远远不能使Treeviews和Listviews成为...井对象列表: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

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

干杯,