CSHARP_GEPARD Telegram 92
Коллеги, интересный вопрос поставил один хороший человек.

Оказывается, что если из ASP.NET возвращать массивы байт или строки, то будет задействована подсистема Kestrel, которая накапливает и не отдаёт память. Речь про PinnedBlockMemoryPool, который не отдаёт память, которую он аллоцировал для перекладывания.

[ApiController, Route("api/[controller]")]
public sealed class TestsController : ControllerBase
{
static readonly byte[] Data = new byte[1_000_000_000];

[HttpGet(nameof(Download))]
public ActionResult<byte[]> Download()
{
GC.Collect();

using process = Process.GetCurrentProcess();
var memory = process.PrivateMemorySize64;
Console.WriteLine($"{memory / 1_000_000} MB");

return Data;
}
}

Например, в данной ситуации, если последовательно запрашивать данные по 1Гб, то мы очень быстро получим отказ в работе, так как память закончилась.

Возможно кто-то сталкивался с подобным и может поддержать коллегу в его приятном деле по исправлению Kestrel?

P.S.: Я в недоумении, так как в контейнере в docker'e подобной ситуации не наблюдается. Коллега тестировал на Windows, просто запуская проект. В релизе.
🤔18🤯10👍2



tgoop.com/csharp_gepard/92
Create:
Last Update:

Коллеги, интересный вопрос поставил один хороший человек.

Оказывается, что если из ASP.NET возвращать массивы байт или строки, то будет задействована подсистема Kestrel, которая накапливает и не отдаёт память. Речь про PinnedBlockMemoryPool, который не отдаёт память, которую он аллоцировал для перекладывания.

[ApiController, Route("api/[controller]")]
public sealed class TestsController : ControllerBase
{
static readonly byte[] Data = new byte[1_000_000_000];

[HttpGet(nameof(Download))]
public ActionResult<byte[]> Download()
{
GC.Collect();

using process = Process.GetCurrentProcess();
var memory = process.PrivateMemorySize64;
Console.WriteLine($"{memory / 1_000_000} MB");

return Data;
}
}

Например, в данной ситуации, если последовательно запрашивать данные по 1Гб, то мы очень быстро получим отказ в работе, так как память закончилась.

Возможно кто-то сталкивался с подобным и может поддержать коллегу в его приятном деле по исправлению Kestrel?

P.S.: Я в недоумении, так как в контейнере в docker'e подобной ситуации не наблюдается. Коллега тестировал на Windows, просто запуская проект. В релизе.

BY C# Heppard


Share with your friend now:
tgoop.com/csharp_gepard/92

View MORE
Open in Telegram


Telegram News

Date: |

While the character limit is 255, try to fit into 200 characters. This way, users will be able to take in your text fast and efficiently. Reveal the essence of your channel and provide contact information. For example, you can add a bot name, link to your pricing plans, etc. Judge Hui described Ng as inciting others to “commit a massacre” with three posts teaching people to make “toxic chlorine gas bombs,” target police stations, police quarters and the city’s metro stations. This offence was “rather serious,” the court said. Ng Man-ho, a 27-year-old computer technician, was convicted last month of seven counts of incitement charges after he made use of the 100,000-member Chinese-language channel that he runs and manages to post "seditious messages," which had been shut down since August 2020. Content is editable within two days of publishing As of Thursday, the SUCK Channel had 34,146 subscribers, with only one message dated August 28, 2020. It was an announcement stating that police had removed all posts on the channel because its content “contravenes the laws of Hong Kong.”
from us


Telegram C# Heppard
FROM American