【问题标题】:Best Practices with Large DataSet in C#C# 中大型数据集的最佳实践
【发布时间】:2012-02-24 21:23:34
【问题描述】:

目前,我正在设计和实现一个软件,该软件必须在两个具有主从结构的表上实现 CRUD 操作。标题大约有 50 万行,详细信息大约有 10 万行。

在数据集中填充所有这些数据很疯狂,数据也可以更改,我对拥有数据库的本地副本不感兴趣。 我对那个软件能流畅运行很感兴趣。虽然数据集可能不是最好的解决方案,但我应该使用它来与其他软件部分保持一致。

首先,我认为使用 TypedDataset 和一些方法,如 GetNext() 、 GetFirst() 、 GetByCod() 但我不确定是否是最好的解决方案.... 我正在做一个小测试,但不是很流利。

我很想知道其他开发人员如何做到这一点、最佳实践以及对大数据进行操作的“最佳选择”是什么。

我正在使用 Visual Studio 2008 和 Sql Server 2005。

添加: 当您谈论使用 SqlDataReader 时,您指的是这样的东西?

using (SqlConnection con = new SqlConnection(CON)) {

            con.Open();
            SqlCommand cmd = new SqlCommand("SELECT * FROM TABLE");
            cmd.Connection = con;
            SqlDataReader rd = cmd.ExecuteReader();
            BindingSource bindingSource = new BindingSource();
            bindingSource.DataSource = rd;
            bindingNavigator1.BindingSource = bindingSource;

            txtFCOD.DataBindings.Add("Text", bindingSource, "FIELD");
        }

【问题讨论】:

  • 首先我不会使用数据集。为什么你会一次查询所有行?当您必须处理大量的 adta 时,我会使用数据读取器,当您必须提供简单的界面时,我建议您使用 OR Mapper
  • 是的,我同意 Boas Enkler 的观点。只在需要的时间查询需要的数据。
  • 在查询中注意使用表上的索引,并且只要求查询中的特定信息。让数据库完成它的工作:-)
  • 为什么客户端需要这么多数据?

标签: c# visual-studio-2008 dataset typed-dataset


【解决方案1】:

我认为没有办法管理这么大的数据集。

您需要 DataReader,而不是 DataSet。

具有大量数据的本地数据库副本是实现此类目标的有效方法(应用程序的快速响应),但您会遇到同步(复制)、并发等问题。

最佳做法是仅从服务器获取用户真正需要的数据。您必须通过存储过程等使用服务器端处理

我仍然不知道您要处理哪些数据以及您的应用程序的目的是什么,但客户端的大量数据还有另一个缺点 - 您的应用程序需要大量内存和快速 CPU。也许您的计算机速度很快并且能够处理这个问题,但考虑一下当有人将您的应用程序安装在具有 1GHz Atom CPU 的平板电脑上时会发生什么。那将是一场灾难。

【讨论】:

  • @arturn 你想用这个大数据集做什么?
  • 我正在做一个 CRUD 主从表单。
  • 数百万行的表格?这太疯狂了。
【解决方案2】:

很少有需要一次检索所有数据的情况。

您可以考虑以下几点:

  • 使用视图为特定的较小数据集提供服务。
  • 考虑使用 SQL Server 2005 中引入的 OVER() 功能进行分页
  • 不要将数据集用于大量数据。数据读取器很多 在这种情况下效率更高。

我个人认为您应该避免将大量数据加载到内存中,除非您可以完全控制加载的数量和处理时间。请记住,如果在服务器端处理数据,您正在使用其他进程可能需要的资源。

您应该始终尝试一次处理较小的块,最好是尽可能短的时间。这可以防止您的进程长时间占用任何资源。

【讨论】:

    猜你喜欢
    • 2011-03-07
    • 2020-02-09
    • 2013-12-06
    • 1970-01-01
    • 2019-03-15
    • 2016-09-19
    • 2015-10-29
    • 2016-04-04
    • 1970-01-01
    相关资源
    最近更新 更多