C# 从mainform的数据库加载数据更好吗?

C# 从mainform的数据库加载数据更好吗?,c#,winforms,performance,linq,C#,Winforms,Performance,Linq,我正在开发一个应用程序,它在多个子窗体中使用相同的数据列表,但我注意到,当我创建子窗体时,它在显示之前会有一些延迟。 顺便说一下,我正在使用linq从数据库中获取数据 所以,我的问题是,在加载主窗体时抓取数据并将其传递给其他窗体是否更好 是的。但是在后台执行,这样就不会阻塞UI线程。例如,async/await(异步代码)是从数据库查询数据的好选择,因为它不会阻塞线程。最初加载数据的一个严重缺点,例如在显示spash屏幕时,您必须担心数据是否会更改。例如,UserA可以启动应用程序并从基础表加载

我正在开发一个应用程序,它在多个子窗体中使用相同的数据列表,但我注意到,当我创建子窗体时,它在显示之前会有一些延迟。 顺便说一下,我正在使用linq从数据库中获取数据


所以,我的问题是,在加载主窗体时抓取数据并将其传递给其他窗体是否更好

是的。但是在后台执行,这样就不会阻塞UI线程。例如,async/await(异步代码)是从数据库查询数据的好选择,因为它不会阻塞线程。

最初加载数据的一个严重缺点,例如在显示spash屏幕时,您必须担心数据是否会更改。例如,UserA可以启动应用程序并从基础表加载10条记录。然后UserB将一条记录插入到基础表中。你需要设计一种方法,让应用程序在每次UserA加载其他表单时检查新记录


正如@JonKoivula所提到的,最好在后台加载数据,而不要阻塞UI线程。在加载数据时,您可能会显示一个“微调器”或一些娱乐用户的东西。根据我的经验,用户理解“微调器”,并真正相信它们表明实际正在工作。

你怎么能这么说?从来没有听说过可以有一个独立于UI的业务层?这里的答案应该是“不,那根本不应该在表单中”。@JonKoivula Okey谢谢你的建议,我稍后会尝试,如果我的问题是愚蠢的,很抱歉,我是windows窗体的新手。虽然最好使用TomTom提到的业务逻辑层,但在这种情况下,使用BLL与否没有任何区别;如果您在UI线程中执行阻塞任务,则会使UI冻结。因此,最好在不同的线程中加载数据。您可以使用Jon提到的异步/等待模式,也可以使用BackgroundWorker或线程。顺便说一句,问题和答案都不是愚蠢的。@RezaAghaei我真正想的是在主UI使用asynctask显示之前在启动屏幕上抓取数据。谢谢。@you's welcome:)最初使用async加载数据。谢谢你们的帮助。