.net 防止;“内存不足”;从SQL数据库填充大量数据时出现异常
如何防止在使用sqldata适配器填充大量数据时出现“内存不足”异常.net 防止;“内存不足”;从SQL数据库填充大量数据时出现异常,.net,sql-server,.net,Sql Server,如何防止在使用sqldata适配器填充大量数据时出现“内存不足”异常 DataTable dt = new DataTable(); sqlDataAdapter daTest = new sqlDataAdaptor("select * from dailyattendance",sqlconn); daTest.fill(dt); 您应该尝试分页结果,以避免一次加载所有数据。 : 下面是@Scott提到的SQL server 2012+的示例 SELECT * FROM [dailyat
DataTable dt = new DataTable();
sqlDataAdapter daTest = new sqlDataAdaptor("select * from dailyattendance",sqlconn);
daTest.fill(dt);
您应该尝试分页结果,以避免一次加载所有数据。 : 下面是@Scott提到的SQL server 2012+的示例
SELECT *
FROM [dailyattendance]
OFFSET @PageSize * (@PageNumber - 1) ROWS
FETCH NEXT @PageSize ROWS ONLY;
您必须使用
@PageSize
和@PageNumber
对结果进行分页,以避免一次加载所有数据。
:
下面是@Scott提到的SQL server 2012+的示例
SELECT *
FROM [dailyattendance]
OFFSET @PageSize * (@PageNumber - 1) ROWS
FETCH NEXT @PageSize ROWS ONLY;
您必须使用
@PageSize
和@PageNumber
我支持Michael的答案,因为我们应该分页并加载结果。但是我们考虑了一个场景,我们需要将所有内容加载到内存中进行一些处理
创建MemoryFailPoint类的实例将创建内存
大门。内存门在启动之前检查是否有足够的资源
需要大量内存的活动。未通过检查
导致引发UnficientMemoryException异常。这
异常阻止启动操作并减少
由于缺乏资源而导致故障的可能性。这使您能够
降低性能以避免OutOfMemoryException异常和
任何可能因不当处理合同而导致的国家腐败
代码中任意位置的异常
请注意,MemoryFailPoint远不是完美的,可以找到更多详细信息我支持Michael的回答,因为我们应该翻页并加载结果。但是我们考虑了一个场景,我们需要将所有内容加载到内存中进行一些处理 创建MemoryFailPoint类的实例将创建内存 大门。内存门在启动之前检查是否有足够的资源 需要大量内存的活动。未通过检查 导致引发UnficientMemoryException异常。这 异常阻止启动操作并减少 由于缺乏资源而导致故障的可能性。这使您能够 降低性能以避免OutOfMemoryException异常和 任何可能因不当处理合同而导致的国家腐败 代码中任意位置的异常
请注意,MemoryFailPoint远不是完美的,可以找到更多的细节唉,我真希望他们在那个例子中使用了参数化查询,查询可以用
“SELECT top(@pageSize)*from Orders WHERE OrderID>@lastRecord ORDER by OrderID”
表示,@pageSize
周围的括号很重要,如果没有它,您将得到一个语法错误。由于MSSQL不允许按MYSQL执行“限制”(0100),我如何选择下面的下一条记录是的,这是可能的,我想这个例子是针对MS SQL的。@Scott提供了一个在安全性方面更好的例子。当你要做一个简单的例子时,你应该调查参数的使用情况。@JimLim通过将lastRecord
设置为上一个结果集中的最后一个OrderID
来选择下一条记录。此外,如果您希望在SQL2012及更新版本中使用MYSQL样式,您可以使用类似语法的OFFESET
和FETCH
关键字。唉,我真希望他们在该示例中使用了参数化查询,查询可以通过“从Orders WHERE OrderID>@lastRecord Orderby OrderID中选择top(@pageSize)*”来表示“
,@pageSize
周围的括号很重要,如果没有它,将出现语法错误。由于MSSQL不允许按MYSQL执行”限制(0100),如何选择下面的下一条记录是的,这是可能的,我想这个例子是针对MS SQL的。@Scott提供了一个在安全性方面更好的例子。当你要做一个简单的例子时,你应该调查参数的使用情况。@JimLim通过将lastRecord
设置为上一个结果集中的最后一个OrderID
来选择下一条记录。此外,如果您希望在SQL2012及更新版本中使用MYSQL样式,可以使用类似语法的OFFESET
和FETCH
关键字。谢谢,拉詹。您提供了有用的提示。谢谢,拉詹。您提供了有用的提示。
try
{
using (MemoryFailPoint point = new MemoryFailPoint(100000))
{
// An exception is thrown at this point.
// does not have enough memory.
// We can do our datatable operation here
}
}
catch (InsufficientMemoryException e)
{
// MemoryFailPoint threw an exception
}