Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 防止;“内存不足”;从SQL数据库填充大量数据时出现异常_.net_Sql Server - Fatal编程技术网

.net 防止;“内存不足”;从SQL数据库填充大量数据时出现异常

.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

如何防止在使用sqldata适配器填充大量数据时出现“内存不足”异常

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
   }