如何加速.NET winforms渲染

时间:2009-03-26 10:56:59

标签: winforms performance rendering

我有一系列表格并在它们之间导航。

每个表单都有一组控件,我从SQLite数据库加载属性,这是长(约1s)操作,不会给用户最好的感觉,因为表单正逐渐被绘制。

我不介意延迟,但我希望在加载所有数据时绘制表单。我想避免使用新线程,因为这会导致跨线程操作问题。

除了通过缓存加载的数据来加速整个应用程序之外,还有什么好的解决方案吗?

5 个答案:

答案 0 :(得分:5)

有一种简单的方法可以加快许多控件的感知性能,尤其是列表视图,列表框,组合框等数据密集型控件。

在填充它们之前,请调用BeginUpdate()方法,完成后调用EndUpdate()。这会禁用重绘控件,直到您用数据填充它为止。

答案 1 :(得分:2)

对不起。这就是线程的用途。 “跨线程操作问题”已明确定义,并且存在处理它们的常见模式。只需将线程交互的位置减少到最小(在这种情况下,它将是一个单独的位置 - 在加载数据之后)并且它变得微不足道。

还有一些类使winforms应用程序中的多线程变得更容易,因为它们抽象出了线程之间的交互。 BackgroundWorker(关于它的博客文章的链接)将为您执行另一个线程的工作,并通过在UI线程上触发事件来通知您。您可以获得多线程的好处,而不会有任何陷阱。

答案 2 :(得分:1)

我发现加载Winform控件(如组合框和列表框)在指向Views而不是表本身时加载速度要快得多,特别是如果你可以将视图限制为与控件相比更加精简翻阅整个表格。

答案 3 :(得分:0)

回到VB时,我使用了LockWindowUpdate API。由于这需要一个窗口句柄,它也应该可以与WinForms一起使用。虽然,从未尝试过。

答案 4 :(得分:0)

这个链接有一些很好的解决方案,据我认为BackgroundWorker流程应该有所帮助。 http://devcomponents.com/blog/?p=361