Owin服务在windows服务中自托管时以极小的块返回数据

本文关键字:服务 极小 返回 数据 windows Owin | 更新日期: 2023-09-27 18:27:44

我有一个使用Owin的自托管ASP.NET Web Api项目,我不明白为什么响应似乎需要非常长的时间才能得到响应。我看到600KB的数据需要20秒以上。为了测试这不是机器,我制作了一个快速节点/快递应用程序,它返回了相同的数据并进行了部署,并且需要几毫秒才能获得数据。在Chrome开发工具中,我可以一次观看WebApi响应下载KB,奇怪的是,它似乎总是一次下载4KB,而节点服务似乎一次获得了所有内容。我不知所措。我已经和这个斗争了好几天了。这两个响应具有相同的标头、相同的数据、相同的所有内容。为什么WebApi似乎想给我一些难以置信的小数据。

编辑

我们运行OWIN Web Api应用程序是windows服务。我们选择返回数据的方式似乎导致了问题

HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
result.Content = new StreamContent(new MemoryStream(Encoding.UTF8.GetBytes(data)));
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
return result;

默认流大小显示为4KB

Owin服务在windows服务中自托管时以极小的块返回数据

.NET流是导致性能问题的原因。我的朋友向我指出了4KB的块大小,所以我去寻找任何可能默认为4KB的东西,果然是StreamContent,我们的WebApi控制器像这样返回

HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
result.Content = new StreamContent(new MemoryStream(Encoding.UTF8.GetBytes(data)));
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
return result;

CCD_ 2的默认缓冲区大小为4096。通过将缓冲区增加到更大的值,比如1MB,这可能太大了,应该是256KB或512KB,性能非常好。

result.Content = new StreamContent(new MemoryStream(Encoding.UTF8.GetBytes(response.jsonString)), 1000000);