C#中使用大型DataSet的最佳实践

时间:2012-02-22 11:50:00

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

目前,我正致力于设计和实施一个软件,该软件必须在两个具有master-detail arquitecture的表上实现CRUD操作。 Header有大约五十万行,细节大约有几百万行。

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

首先我想使用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");
        }

2 个答案:

答案 0 :(得分:4)

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

您需要DataReader,而不是DataSet。

具有大量数据的数据库的本地副本是达到类似内容的有效方式(来自您的应用程序的快速响应),但是您将遇到同步(复制),并发等问题。

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

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

答案 1 :(得分:3)

应该很少需要一次检索所有数据。

您可以考虑以下事项:

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

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

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