Не знаю точно, что с памятью, может утечка, может это нормально, хотел узнать, кто в этом понимает, чтобы избежать такого в дальнейшем.
При запуске проекта локально память имеет такое состояние -
И оно никак не растет.
if (data.Length > 2 )
{
dataFromJSON.Append(await System.IO.File.ReadAllTextAsync("cities.json"));
CitiesModel model = JsonConvert.DeserializeObject<CitiesModel>(dataFromJSON.ToString());
Regex regex = new Regex($"^{data.ToLower()}");
var s = model.Cities.Where(x => regex.IsMatch(x.CityName.ToLower())).ToList();
return Ok(JsonConvert.SerializeObject(s));
}
Но когда я делаю запрос через поле, то память начинает сильно расти при работе - c этим кодом. ReadAllTextAsync вытягивает больше 80к названий и потом я еще делаю DeserializeObject и память вырастает до 300+-
Но меня пугает не это, а то, что растет с каждым запросом и никак не уменьшается. Сделал 5 запросов и вот такое щас
Как решить эту проблему, думаю, что это не нормально и не должно так быть или объясните, кто понимает, почему память не опускается?
UPDATE
Оптимизировал так и работает лучше, все равно память растет, если как говорят, что GC сам очистить когда нужно будет.
Если есть критика в коде - пишите, как можно еще оптимизировать, чтобы не засорять память.
[HttpPost]
public async Task<IActionResult> GetCity()
{
string data = null;
using (StreamReader reader = new StreamReader(Request.Body))
{
data = await reader.ReadToEndAsync();
}
CitiesModel model=null;
JsonSerializer serializer = new JsonSerializer();
using (FileStream ss = System.IO.File.Open("cities.json", FileMode.Open))
using (StreamReader sr = new StreamReader(ss))
using (JsonReader reader = new JsonTextReader(sr))
{
model = serializer.Deserialize<CitiesModel>(reader);
}
Regex regex = new Regex($"^{data.ToLower()}");
var s = new List<CityModel>();
foreach (var city in model.Cities)
{
if (regex.IsMatch(city.CityName.ToLower()))
s.Add(city);
}
System.GC.Collect();
return Ok(JsonConvert.SerializeObject(s));
}
Не знаю точно, что с памятью, может утечка, может это нормально, хотел узнать, кто в этом понимает, чтобы избежать такого в дальнейшем.
Это нормально.
Общее решение:
В вашем коде смущает вызов функции dataFromJSON.Append.
Уверен, если в этом вызове сделать правки потребление памяти должно уменьшиться и утечки не будет. Можно перепроверить момент с утечкой и для теста вызвать System.GC.Collect() по нажатию на тестовуюи кнопку или в профайлере памяти.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
На сервере в БД хранятся файлыНеобходимо отправлять эти файлы на почту
Нужна помощь, пожалуйстаНужно вычислить idf для конкретного текста в richtexbox (tf есть)
У меня есть класс со свойством типа enum property и при сериализации в json оно выводится как число, в то время как мне надо чтобы результат был в виде...