我们有一个客户端 - 服务器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利用率,它会工作还是我不知道在哪里正确使用它??
答案 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
http://objectlistview.sourceforge.net/cs/gettingStarted.html
我自己在一些项目中使用它并取得了巨大成功!!
干杯,