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: |

ZDNET RECOMMENDS Administrators 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. "Doxxing content is forbidden on Telegram and our moderators routinely remove such content from around the world," said a spokesman for the messaging app, Remi Vaughn. The imprisonment came as Telegram said it was "surprised" by claims that privacy commissioner Ada Chung Lai-ling is seeking to block the messaging app due to doxxing content targeting police and politicians.
from us


Telegram C# Heppard
FROM American