Постоянно растущее потребление оперативной памяти процессом - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Столкнулся с проблемой, не знаю как ее решить. В простое программа стабильно "ест" оперативную память. По 8кб каждые несколько секунд (в зависимости от частоты вызова функции). Main:
Листинг программы
  1. static void Main(string[] args)
  2. {
  3. while (true)
  4. {
  5. Func();
  6. System.Threading.Thread.Sleep(50);
  7. }
  8. }
Далее у нас несколько вариантов функции. Во-первых, память начинает расти если преобразовывать что-либо в string:
Листинг программы
  1. static void Func()
  2. {
  3. int a = 0;
  4. a.ToString();
  5. }
Также память будет расти если пытаться двигать курсор в консоли:
Листинг программы
  1. static void Func()
  2. {
  3. Console.SetCursorPosition(10, 10);
  4. }
Если переменной присвоить DateTime.Now, то проблем нет, память ничто не ест, она не растет:
Листинг программы
  1. static void Func()
  2. {
  3. var a = DateTime.Now;
  4. }
Но в такой вариации память уже начинает капать (в а уже string):
Листинг программы
  1. static void Func()
  2. {
  3. var a = DateTime.Now.ToLongTimeString();
  4. }
Может кто посоветовать как сделать так, чтобы при выполнении функции, память, которую функция использовала, освобождалась? Также интересно почему именно 8кб, это какой-либо буфер, я правильно понимаю? Читал про Dispose() паттерн, но разобраться с ним нормально не вышло.

Решение задачи: «Постоянно растущее потребление оперативной памяти процессом»

textual
Листинг программы
  1. using System;
  2. using System.Threading;
  3.  
  4. class Program
  5. {
  6.     static void Main()
  7.     {
  8.         var buffer = new char[79];
  9.         buffer[0] = '\r';
  10.  
  11.         while (true)
  12.         {
  13.             var now = DateTime.Now;
  14.  
  15.             buffer[71] = (char)('0' + (now.Hour / 10));
  16.             buffer[72] = (char)('0' + (now.Hour % 10));
  17.             buffer[73] = ':';
  18.             buffer[74] = (char)('0' + (now.Minute / 10));
  19.             buffer[75] = (char)('0' + (now.Minute % 10));
  20.             buffer[76] = ':';
  21.             buffer[77] = (char)('0' + (now.Second / 10));
  22.             buffer[78] = (char)('0' + (now.Second % 10));
  23.  
  24.             Console.Write(buffer);
  25.             Thread.Sleep(100);
  26.         }
  27.     }
  28. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы