如何解决C#中数据集的outofmemory异常错误?
我的数据库表中有数百万条记录,我试图将它们存储在一个数据集中(我使用数据集创建Lucene索引) 问题是数据集无法处理数百万条记录,这给了我内存不足的异常如何解决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
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可以帮助您获取部分数据。如果您获取的所有数据都是内存不足的错误。@约翰:我们建议您不要先填充数据集。逐项填充索引,而不是传入数据集。