大型数据库记录引发内存异常Asp.Net WebAPI

时间:2016-08-03 18:45:46

标签: c# asp.net sql-server asp.net-web-api

我们创建了用于查询Oracle数据库的WebAPI。查询返回非常大的结果。我们无法进行分页,因为客户端应用程序需要在一次调用中获得整个结果。当存在大量数据时会出现问题。正如在其他论坛中所建议的那样,我尝试在link

中建议在web.config中添加以下标记
 <requestLimits maxAllowedContentLength="2147483647" />

(这是放在

里面
<system.webServer><security><requestFiltering>

<httpRuntime targetFramework="4.6.1" maxRequestLength="2147483647" executionTimeout="1600" requestLengthDiskThreshold="2147483647" />

放在

  <system.web>

但是在添加之后,尝试调用API它会永远加载(等待将近1小时),然后再次将它从System.OutofMemoryException中抛出。任何人都可以帮我这个,因为这是我的第一个Web API。我们无法为此创建存储过程,因为我们只有读取访问权限的数据库

 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;

我甚至尝试添加断点,只是添加了适配器。填充(selectResults)需要更长的时间。如果行计数大约为45,000,则返回结果而没有任何问题。我试过的ID假设返回600,000行,我们得到内存异常。任何人都可以帮助我。

0 个答案:

没有答案