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

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

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

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

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

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);
        }
    }
}

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


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

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

10   голосов , оценка 4.4 из 5
Похожие ответы