gpt4 book ai didi

c# - Web API 系统内存不足异常

转载 作者:太空宇宙 更新时间:2023-11-03 12:13:24 24 4
gpt4 key购买 nike

我知道有很多关于这个问题的问题。但我无法解决我的问题。

API 流程

  1. 它接受两个参数仪表序列号和日期时间。
  2. 参数传递后调用API
  3. API 将在两个数据库中搜索发送的电表序列号。
  4. 获取记录后,它应该给出输出。

代码

下面是我的代码

public HttpResponseMessage GetDetails(string msn, DateTime dt)
{
try
{
var prodDetails = mdcEntitites.tj_xhqd.Where(m => m.sjsj >= dt)
.Select(x => new { MSN = x.zdjh, PingDateTime = x.sjsj, PingValue = x.xhqd })
.ToList();

var mainDetails = kesc.tj_xhqd.Where(m => m.sjsj >= dt)
.Select(x => new { MSN = x.zdjh,PingDateTime= x.sjsj,PingValue = x.xhqd })
.ToList();

var res = prodDetails.Concat(mainDetails).ToList();
return Request.CreateResponse(HttpStatusCode.OK, new {details = res });

}
catch (Exception ex)
{
return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex);
}
}

在上面的调用中,我接受了一个日期时间。当仪表被派往现场工作人员时,系统中会标记日期时间,因此上面的日期就是该日期时间。

它将搜索该日期时间之后该序列号的所有记录。

错误

当我尝试使用当前日期时间运行 API 时,使用 Postman 得到以下结果

{
"details": [
{
"MSN": "002998002523",
"PingDateTime": "2018-06-21T08:38:12",
"PingValue": "26"
},
{
"MSN": "002998001286",
"PingDateTime": "2018-06-21T08:38:13",
"PingValue": "18"
},
.
.
.
.
.
]
}

但是当我尝试在日期时间小于当前日期时间的情况下运行 API 时,它给出了以下异常

Exception of type 'System.OutOfMemoryException' was thrown.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.

来源错误:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

堆栈跟踪:

[OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.] System.IO.MemoryStream.set_Capacity(Int32 value) +89 System.IO.MemoryStream.EnsureCapacity(Int32 value) +90 System.IO.MemoryStream.Write(Byte[] buffer, Int32 offset, Int32 count) +326 Microsoft.VisualStudio.Web.PageInspector.Runtime.Tracing.ArteryFilter.Write(Byte[] buffer, Int32 offset, Int32 count) +62 System.Web.HttpWriter.FilterIntegrated(Boolean finalFiltering, IIS7WorkerRequest wr) +9746340 System.Web.HttpResponse.FilterOutput() +104 System.Web.CallFilterExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +58 System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) +48 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +71

我怎样才能摆脱这个问题?

如有任何帮助,我们将不胜感激。

最佳答案

正如 dlxeon 指出的那样,the PageInspector might be the cause of your exception .然而,无论如何你都有一个潜在的问题:你没有限制你返回的搜索结果的数量,并且当你的数据库增长时这可能会成为 future 的问题。你可以这样做:

  1. 向您的 API 调用添加可选的 page 参数,并添加类似 .Skip((page-1)*PageSize).Take(PageSize) 的内容到您的数据库查询,就在 .Where 之后。这是假设页面从 1 开始并且您定义了 PageSize 常量。1

  2. 根据客户的需要在您的响应中包含寻呼信息,例如:

{  "pageSize": 10,  "currentPage": 1,  "details: "[    ...  ]}

1在您的情况下,它会稍微复杂一些,因为您正在执行两个数据库查询,但您明白了。

关于c# - Web API 系统内存不足异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50964970/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com