从数据库到代码的大量未知数据

本文关键字:未知 未知数 数据 数据库 代码 | 更新日期: 2023-09-27 18:08:09

我必须从我的数据库中获得大量不同的记录(1000.000),以便从这些数据构建报告。我的数据库在远程系统上。现在每个报告都有不同的sql语句。这些sql语句被发送到服务。服务填充DataSet并将其返回给我的应用程序。现在我可以将DataSet绑定到报表。问题是具有第三个数记录的数据集具有巨大的内存消耗。我的意思是,如果我加载数据,内存上升到1gb一次加载。

是否有另一种方法来加载数据而不消耗内存?我的意思是我已经使用像NHibernate这样的ORM,但问题是我不知道将加载的数据,有数百个报告与不同的sql语句可以更改,所以我不能创建数百个类来映射…

编辑:

下面是我使用的示例代码:

     DataSet dataSet = new DataSet();
     try
     {
        using (FbConnection connection = new FbConnection(strConnString))
        {
           connection.Open();
           using (FbCommand cmd =
              new FbCommand(
                 "SELECT * FROM CUSTOMERS;",
                 connection))
           {
              FbDataAdapter fbd = new FbDataAdapter(cmd);
              fbd.Fill(dataSet);
              // This is what the default ADO.Net provider can do..
              //SqlCommand command = new SqlCommand(queryString, connection);
              //System.Xml.XmlReader reader = command.ExecuteXmlReader();
           }
        }
     }
     catch (Exception ex)
     {
     }

从数据库到代码的大量未知数据

您应该问的问题是:它有多少数据,内存开销是多少。如果开销很大,则需要找到更好的数据结构。如果DATA本身对于内存来说太大,则需要探索一次只将其中一部分放入内存的方法。

无论哪种情况,使用NHibernate来报告如此大的数据量都是可疑的——使用现有的映射类来构造查询是有用的,但是你必须包括一个简单的未映射的DTO类或对象[]或类似的投影,以避免NHibernate为所有结果实例化映射类——后者对性能和内存消耗都不好。

哦,你的意思是你有一个返回数据集的web服务吗?这通常被认为是糟糕的样式,因为DataSet类是特定于microsoft的,并且出于各种其他原因(http://www.hanselman.com/blog/ReturningDataSetsFromWebServicesIsTheSpawnOfSatanAndRepresentsAllThatIsTrulyEvilInTheWorld.aspx)。