C# 大型数据库记录抛出内存不足异常Asp.Net WebAPI

C# 大型数据库记录抛出内存不足异常Asp.Net WebAPI,c#,asp.net,sql-server,asp.net-web-api,C#,Asp.net,Sql Server,Asp.net Web Api,我们创建了用于查询Oracle数据库的WebAPI。查询返回的结果非常庞大。我们不能进行分页,因为客户端应用程序需要在一次调用中获得整个结果。当有大量数据抛出内存异常时,会出现问题。正如在其他论坛中建议的那样,我尝试在web.config中添加以下标记,也如中建议的那样 我甚至试着添加断点,只是适配器。填充(selectResults)需要更长的时间。如果行计数约为45000,则返回结果时不会出现任何问题。我尝试的ID假定返回600000行,这是我们得到内存异常的地方。有人能帮我一下吗。该标记用

我们创建了用于查询Oracle数据库的WebAPI。查询返回的结果非常庞大。我们不能进行分页,因为客户端应用程序需要在一次调用中获得整个结果。当有大量数据抛出内存异常时,会出现问题。正如在其他论坛中建议的那样,我尝试在web.config中添加以下标记,也如中建议的那样


我甚至试着添加断点,只是适配器。填充(selectResults)需要更长的时间。如果行计数约为45000,则返回结果时不会出现任何问题。我尝试的ID假定返回600000行,这是我们得到内存异常的地方。有人能帮我一下吗。

该标记用于最大Http请求,与数据库无关。请帮自己一个忙,使用sql参数,而不是将sql字符串连接在一起。这样会让自己受到sql注入攻击。这有点离题,因为这不是你的直接问题,但解决这个问题也至关重要。你正在尝试检索、处理、序列化和传输超过2GB的数据。那太疯狂了。“我们无法进行分页,因为客户端应用程序需要在一次调用中获得整个结果”对于如此大量的数据,要求不现实,并表明存在致命的设计缺陷。请记住,对于庞大的数据,您也应该进行检查。尽量不要使用
Select*
它对性能有很大的影响,而要选择使用列名(我知道有点无聊)。该标记用于最大Http请求,与数据库无关。请帮自己一个忙,使用sql参数,而不是将sql字符串串联在一起。这样会让自己受到sql注入攻击。这有点离题,因为这不是你的直接问题,但解决这个问题也至关重要。你正在尝试检索、处理、序列化和传输超过2GB的数据。那太疯狂了。“我们无法进行分页,因为客户端应用程序需要在一次调用中获得整个结果”对于如此大量的数据,要求不现实,并表明存在致命的设计缺陷。请记住,对于庞大的数据,您也应该进行检查。尽量不要使用
Select*
它对性能有很大的影响,而是使用列名来选择(我知道有点无聊)。
 <requestLimits maxAllowedContentLength="2147483647" />
<system.webServer><security><requestFiltering>
<httpRuntime targetFramework="4.6.1" maxRequestLength="2147483647" executionTimeout="1600" requestLengthDiskThreshold="2147483647" />
  <system.web>
 public HttpResponseMessage Getdetails([FromUri] string[] id)
{
  string connStr =  ConfigurationManager.ConnectionStrings["ProDataConnection"].ConnectionString;
  using (OracleConnection dbconn = new OracleConnection(connStr))
 {
  var inconditions = id.Distinct().ToArray();
  var srtcon = string.Join(",", inconditions);
  DataSet userDataset = new DataSet();
  var strQuery = @"SELECT * from STCD_PRIO_CATEGORY where STPR_STUDY.STD_REF IN(" + srtcon + ")";
   using (OracleCommand selectCommand = new OracleCommand(strQuery, dbconn))

 {
  using (OracleDataAdapter adapter = new OracleDataAdapter(selectCommand))
{
    DataTable selectResults = new DataTable();
    adapter.Fill(selectResults);
    var returnObject = new { data = selectResults };
    var response = Request.CreateResponse(HttpStatusCode.OK, returnObject, MediaTypeHeaderValue.Parse("application/json"));
    ContentDispositionHeaderValue contentDisposition = null;
    if (ContentDispositionHeaderValue.TryParse("inline; filename=ProvantisStudyData.json", out contentDisposition))
    {
        response.Content.Headers.ContentDisposition = contentDisposition;
    }
    return response;