c# - WPF C# 应用程序从 SQL Server 获取数据的时间太长

标签 c# sql-server wpf user-interface

我有一个连接到 SQL Server 的 WPF 应用程序;当我将多达 10 条记录加载到我的 DataGrid 时,我的应用程序运行良好且响应速度太快,但是当我加载所有行(几乎 1000 行)时,我的应用程序需要大约 15 秒来加载和卡住整个用户界面。

但是当我在 SQL Server 中执行相同的查询时,它只用了大约 00:00:00.490 秒来加载这 1000 行,这太快了。我已经做的如下,以避免 UI 卡住和快速执行查询。我做错了什么?由于我是 C# 世界的新手,请提供代码片段指导。

// Calling function to load data into DataGrid in a new thread,
// to make UI responsive.
String qry = "select * from institutes_tbl"
DataGrid dg = MainDataGrid;
Thread thread = new Thread(() => FunDataGrid_DataView(dg, qry));
thread.IsBackground = true;
thread.Start(); 

但不幸的是,我的用户界面显示消息“未响应”。下面是函数定义:

public void FunDataGrid_DataView(DataGrid dg, string qry)
{
    Application.Current.Dispatcher.BeginInvoke
    (
        DispatcherPriority.Background,
        new Action(() =>
        {                       
            try
            {
                con = new SqlConnection(con_string);
                cmd = new SqlCommand(qry, con);
                cmd.CommandTimeout = 12 * 3600;
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataTable dt = new DataTable();
                da.Fill(dt);
                dg.ItemsSource = dt.DefaultView;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error!",
                    MessageBoxButton.OK, MessageBoxImage.Warning);
            }                                                                      
        }
    ));                            
}

这是我的 XAML:

<DataGrid x:Name="DataGrid_View"
          MouseLeftButtonUp="DataGrid_View_MouseLeftButtonUp"
          ItemsSource="{Binding DATA_TBL}"
          LoadingRow="DataGrid_View_LoadingRow" Grid.Row="2"
          Grid.Column="0" ScrollViewer.CanContentScroll="False"
          AutoGenerateColumns="False" CanUserAddRows="False"
          Background="#7F179DB2" CellStyle="{StaticResource CellStyle}">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Name"
                            Binding="{Binding NAME}" Width="5*"/>
        <DataGridTextColumn Header="Father Name"
                            Binding="{Binding F_NAME}" Width="5*"/>
        <DataGridTextColumn Header="CNIC"
                            Binding="{Binding CNIC}" Width="5*"/>
    </DataGrid.Columns>
</DataGrid>

我希望我的用户界面能够响应并且数据能够快速加载。我现在正在本地主机上工作。

最佳答案

启动新的后台线程从表中查询数据,如下所示:

Task.Factory.StartNew(() =>
{
    try
    {
        con = new SqlConnection(con_string);
        cmd = new SqlCommand(qry, con);
        cmd.CommandTimeout = 12 * 3600;
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        Application.Current.Dispatcher.BeginInvoke
        (
            DispatcherPriority.Background,
            new Action(() => dg.ItemsSource = dt.DefaultView)
        );
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Error!", MessageBoxButton.OK,
            MessageBoxImage.Warning);
    }
});

关于c# - WPF C# 应用程序从 SQL Server 获取数据的时间太长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53362403/

相关文章:

c# - 在没有安装 Sharepoint 的情况下在 VS 2010 中创建 Sharepoint 目录

sql-server - 为什么 SQL Server 2008 对本地主机的查询比远程服务器慢得多?

sql - sys.tables MS SQL Server 中的 lob_data_space_id

c# - 优化 WPF 4.0 TreeView 滚动性能

.net - 在 WPF 功能区应用程序菜单中使用 DataTemplate 时会出现其他嵌套级别

c# - 读取 NetworkStream 不会推进流

c# - 我的进程在等待输入吗?

sql-server - T-SQL 存储过程 - 检测参数是否作为 OUTPUT 提供

c# - 为什么在 MultiBinding 中转换值时会得到 DependencyProperty.UnsetValue?

c# - 默认代理如何绕过大多数网址并仅适用于少数