【发布时间】:2011-01-19 02:26:45
【问题描述】:
我有一个 WPF 数据库查看器应用程序:它是一个简单的主窗口,其中包含一个用户控件和一个数据网格,显示从 SQLite 数据库中提取的数据。
问题是这个应用程序需要 6 秒才能启动,直到它可用。
我尝试在主窗口的构造函数中构建用户控件(并完成所有数据加载):
启动画面会以这种方式显示 5 秒,然后是 1 秒的空白主窗口,直到应用程序可以使用为止。
用户表示,事情(视觉上)发生需要很长时间。
然后我将用户控件创建(和数据加载)移到主窗口的 Loaded 事件处理程序中:
初始屏幕将显示 3 秒,然后是 3 秒的空白主窗口,直到应用程序准备就绪。
用户说它“更好”,但不喜欢半成品主窗口显示禁用状态这么长时间。
是否有一些关于感知应用程序加载时间的一般性建议,或者是否有任何其他关于如何改善这种情况的建议?
我相信理想情况下,主窗口会尽可能快地显示,以及一些沙漏或微调器,直到加载数据。但是我不能只将用户控件的创建移到后台工作人员中,因为这将在错误的线程上完成。
有人对这个问题有什么建议吗?
编辑:
请注意,现在我刚刚分配了一个 LINQ-to-EF 查询作为网格数据源。
一种可能的改进可能是在后台将此数据加载到数据表中,并且仅在加载后分配它...
编辑2: 我使用带有 System.Data.SQLite 和 EF4 的 .net 4 来加载数据。大约有 4000 行和 30 列。
【问题讨论】:
-
您从数据库中加载了多少数据?您如何加载数据 - 使用 ORM(如果是,是哪个?)或普通 ADO.NET?
-
让用户知道很多事情正在发生。查看实际情况并进行相应优化。登录屏幕或扩展启动画面(带有一些波浪形动画/进度条)可能正是他们想要的。
-
@alimbada:我已编辑问题以包含此信息。但它比实体框架等更普遍的问题。ADO.NET 或任何 ORM 将花费时间来加载数据,您也可以用 Thread.Sleep(..) 替换它。问题更多是关于如何处理这种情况。
标签: c# .net wpf performance app-startup