【发布时间】:2016-08-09 17:19:57
【问题描述】:
我们创建了用于查询 Oracle 数据库的 WebAPI,以 JSON 格式返回它们。我有以下代码
public class PDataController : ApiController
{
public HttpResponseMessage Getdetails([FromUri] string[] id)
{
List<OracleParameter> prms = new List<OracleParameter>();
string connStr = ConfigurationManager.ConnectionStrings["PDataConnection"].ConnectionString;
using (OracleConnection dbconn = new OracleConnection(connStr))
{
DataSet userDataset = new DataSet();
var strQuery = @"SELECT * from STCD_PRIO_CATEGORY where STPR_STUDY.STD_REF IN(";
StringBuilder sb = new StringBuilder(strQuery);
for(int x = 0; x < inconditions.Length; x++)
{
sb.Append(":p" + x + ",");
OracleParameter p = new OracleParameter(":p" + x, OracleType.Int32);
p.Value = inconditions[x];
prms.Add(p);
}
if(sb.Length > 0) sb.Length--;
strQuery = strQuery + sb.ToString() + ")";
using (OracleCommand selectCommand = new OracleCommand(strQuery, dbconn))
{
selectCommand.Parameters.AddRange(prms.ToArray());
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=PStudyData.json", out contentDisposition))
{
response.Content.Headers.ContentDisposition = contentDisposition;
}
return response;
}
}
}
}
查询返回的结果很大,因此有时会抛出 OutOfMemoryException。 而不是在每个页面请求期间调用 API。在每个初始页面请求上调用 API,在中间层缓存 DB 响应,然后从“本地”缓存中分页。我们可以做上述方法吗?我真的被内存问题困住了,无法继续前进。因为我对 ASP.NET 和 C# 编码非常陌生。非常感谢任何帮助。谢谢
【问题讨论】:
-
就像 Roman 所说的,让 api 接受页码和可选的页面大小并返回那些特定的记录。添加检查以确保页面大小受到限制(例如不超过 100 条记录)。
标签: c# asp.net asp.net-mvc asp.net-web-api