Постоянно растущее потребление оперативной памяти процессом - C#
Формулировка задачи:
Здравствуйте. Столкнулся с проблемой, не знаю как ее решить. В простое программа стабильно "ест" оперативную память. По 8кб каждые несколько секунд (в зависимости от частоты вызова функции).
Main:
Далее у нас несколько вариантов функции. Во-первых, память начинает расти если преобразовывать что-либо в string:
Также память будет расти если пытаться двигать курсор в консоли:
Если переменной присвоить DateTime.Now, то проблем нет, память ничто не ест, она не растет:
Но в такой вариации память уже начинает капать (в а уже string):
Может кто посоветовать как сделать так, чтобы при выполнении функции, память, которую функция использовала, освобождалась? Также интересно почему именно 8кб, это какой-либо буфер, я правильно понимаю? Читал про Dispose() паттерн, но разобраться с ним нормально не вышло.
static void Main(string[] args) { while (true) { Func(); System.Threading.Thread.Sleep(50); } }
static void Func() { int a = 0; a.ToString(); }
static void Func() { Console.SetCursorPosition(10, 10); }
static void Func() { var a = DateTime.Now; }
static void Func() { var a = DateTime.Now.ToLongTimeString(); }
Решение задачи: «Постоянно растущее потребление оперативной памяти процессом»
textual
Листинг программы
using System; using System.Threading; class Program { static void Main() { var buffer = new char[79]; buffer[0] = '\r'; while (true) { var now = DateTime.Now; buffer[71] = (char)('0' + (now.Hour / 10)); buffer[72] = (char)('0' + (now.Hour % 10)); buffer[73] = ':'; buffer[74] = (char)('0' + (now.Minute / 10)); buffer[75] = (char)('0' + (now.Minute % 10)); buffer[76] = ':'; buffer[77] = (char)('0' + (now.Second / 10)); buffer[78] = (char)('0' + (now.Second % 10)); Console.Write(buffer); Thread.Sleep(100); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д