如何解决C#中数据集的outofmemory异常错误?

如何解决C#中数据集的outofmemory异常错误?,c#,exception,lucene,dataset,out-of-memory,C#,Exception,Lucene,Dataset,Out Of Memory,我的数据库表中有数百万条记录,我试图将它们存储在一个数据集中(我使用数据集创建Lucene索引) 问题是数据集无法处理数百万条记录,这给了我内存不足的异常 public DataSet GetDataSet(string sqlQuery) { DataSet ds = new DataSet(); SqlConnection sqlCon = new SqlConnection("Server=M-E-DB2;Database=IS;Trusted_Co

我的数据库表中有数百万条记录,我试图将它们存储在一个数据集中(我使用数据集创建Lucene索引)

问题是数据集无法处理数百万条记录,这给了我内存不足的异常

public DataSet GetDataSet(string sqlQuery)
    {
        DataSet ds = new DataSet();
        SqlConnection sqlCon = new SqlConnection("Server=M-E-DB2;Database=IS;Trusted_Connection=True;");
        SqlCommand sqlCmd = new SqlCommand();
        sqlCmd.Connection = sqlCon;
        sqlCmd.CommandType = CommandType.Text;
        sqlCmd.CommandText = sqlQuery;
        SqlDataAdapter sqlAdap = new SqlDataAdapter(sqlCmd);
        sqlAdap.Fill(ds);
        sqlCon.Close();
        return ds;

    }
有人可以建议我一个替代方案来处理内存不足异常,记住我的情况


谢谢

您可以使用SqlDataReader逐行获取

using (connection)
    {
        SqlCommand command = new SqlCommand();
        sqlCmd.Connection = sqlCon;
        sqlCmd.CommandType = CommandType.Text;
        sqlCmd.CommandText = sqlQuery;
        connection.Open();

        SqlDataReader reader = command.ExecuteReader();

        if (reader.HasRows)
        {
            while (reader.Read())
            {
                 /// you can get values
            }
        }        
        reader.Close();
    }

您真的需要一次性将所有数据存储在内存中吗?你能不能分批读取数据,然后建立索引?我不知道。据我所知,索引编写器删除所有数据,然后写入索引。我看不出有什么办法可以更新它。虽然不是Lucene专家,但存储是我的问题,不是阅读。SQLDataAdapter已成功读取记录。但是,将它们存储到数据集中会造成问题。@John-逐行存储是您的解决方案。除非你只是存储它们,否则这就是你的问题。如果你的数据真的很大,我认为你需要在文件或数据库中使用它。也许您可以创建临时表并处理其中的数据,然后进行同步。但是,很抱歉,我现在不知道上下文是否可以帮助您。Reader可以帮助您获取部分数据。如果您获取的所有数据都是内存不足的错误。@约翰:我们建议您不要先填充数据集。逐项填充索引,而不是传入数据集。