2016-08-03 15 views
1

Die Web API wir Abfragen erstellt die OracleDB und gibt eine riesige Menge von Datensätzen und wir werden es konvertieren in das JSONUmgang mit großen Datenmenge -Web API

Unten ist der eigentliche Controller-Code

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; 

Das Problem ist, wenn wir eine große Anzahl von Zeilen wie 300.000 haben, es wirft keine Speicherausnahme. Ich habe in anderen Foren gelesen, dass dieses Problem durch Paginierung gelöst werden kann. Aber ich suche nach ganzen Datensätzen auf einmal, da die Client-Anwendung beim Aufruf der Web-API das gesamte Ergebnis benötigt. Ich bin mir nicht sicher, wie ich damit umgehen würde. jede Hilfe wird sehr geschätzt.

+0

Wie hoch ist Ihre RAM-Kapazität? – MRebati

+0

Diese Anwendung läuft auf einem Windows-Server 2012 – user4912134

+0

Windows-Server 2012 ist ein Betriebssystem. RAM ist ein Arbeitsspeicher. Dies sind 2 verschiedene Dinge. Die Anwendung gibt Ihnen Speicherausnahme. Ich möchte wissen, wie viel ist Ihre Speicherkapazität? – MRebati

Antwort

1

hatte ich ein ähnliches Problem und löste es durch einige Parameter zu meinem web.config Zugabe:

<requestLimits maxAllowedContentLength="2147483647" /> 

(dies innerhalb <system.webServer><security><requestFiltering> platziert ist)

und

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

(Dies muss im Abschnitt <system.web> sein)

+0

Dank Robert, die Tags War nicht in der web.config vorhanden. Ich habe sie manuell hinzugefügt. Ich habe versucht, die Anwendung erneut auszuführen, sie lädt für lange Zeit. Gibt es eine Chance, die Zeit zu verbessern, um das Ergebnis etwas schneller zurückzugeben? – user4912134

+0

es dauerte ewig, um Jungen und wieder wirft es die nicht genügend Speicher Ausnahme – user4912134

+0

die ID, die ich getestet sollte 633060 Zeilen zurückgeben .. Aber wirft diesen Fehler .. Ich habe Haltepunkt in der Anwendung hinzugefügt, es zeigte keine Fehler auf den Code – user4912134