Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676

Вывод данных в консоль по таймеру

01.12.2020, 07:32. Показов 4781. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, хотелось бы организовать вывод информации в консоль с заданным интервалом, чтобы программа не занималась выводом вместо основной работы, плюс логи не пухли. Как это делается в C#? Ранее подобное реализовывать не приходилось.
Сейчас вывод сделан так:
C#
1
2
3
Stopwatch sw = new Stopwatch();
sw.Restart();
Console.WriteLine("[{0}] Freq{1}: начало", sw.Elapsed.ToString(), tb);
PS: если всё делать одним классом с таймером, то как этот класс получит информацию по переменным, которые я хочу выводить? Передавать string регулярно, но выводить по таймеру игнорируя поступающие данные вне таймера?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.12.2020, 07:32
Ответы с готовыми решениями:

Вывод данных из буфера на экран по таймеру
Добрый день, есть такая задачка: Создать отдельный поток для считывания данных из файла в буфер . В основном потоке осуществлять вывод...

Вывод данных в консоль, вывод длинных чисел
Нужно реализовать вывод данных в консоль и вывод длинных чисел. Компилятор masm. Пожалуйста, срочно нужно! Сижу на экзамене

Вывод данных в консоль
Здравствуйте! У меня такая проблема, у меня программа которая выводит очень много строк в консоли. Суть проблемы заключается в том, что...

27
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
02.12.2020, 07:57  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Usaga Посмотреть сообщение
Вы могли бы показать маленький пример такого файла
файл я уже давал, вы просто пропустили наверное.

Цитата Сообщение от Usaga Посмотреть сообщение
и показать пример того, что должно получиться в итоге
это я тоже давал.

Цитата Сообщение от Usaga Посмотреть сообщение
Секретного в этих примерах ничего быть не может по определению
Я считаю что вы заблуждаетесь.

Цитата Сообщение от Usaga Посмотреть сообщение
и спрашиваете как это оптимизировать
Не помню чтобы я такое делал.

Цитата Сообщение от Usaga Посмотреть сообщение
Вы своё время не цените, наше могли бы побереч.
Я думал на этой площадке всё добровольно.
0
Эксперт .NET
 Аватар для Usaga
14780 / 9554 / 1366
Регистрация: 21.01.2016
Сообщений: 36,021
02.12.2020, 07:59
Цитата Сообщение от belalugoci Посмотреть сообщение
Я считаю что вы заблуждаетесь.
Считаю, что нет. Вы сами по этому пути пошли:
Цитата Сообщение от belalugoci Посмотреть сообщение
файл я уже давал, вы просто пропустили наверное.
Цитата Сообщение от belalugoci Посмотреть сообщение
это я тоже давал.
Всё секретно, но вы это разглашали, да?)
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
02.12.2020, 08:18  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Не понял... В методе, который должен выводить прогресс каких-то вычислений, вы ForEach используете?..
нет

Цитата Сообщение от Usaga Посмотреть сообщение
Алгоритм вычислений должен прогресс складывать в одну переменную. А метод, что по таймеру дёргается, должен просто выводить значение этой переменной на момент срабатывания таймера.
Так и происходит.

Цитата Сообщение от Usaga Посмотреть сообщение
Каждый цикл в Parallel.ForEach в конце каждой итерации может увеличивать общий для всех циклов счётчик (через Interlocked.Add). Значение этого счётчика и будет выводиться в методе по таймеру. Может быть, разделённое на количество элементов, которые надо обработать (для получения процентов).
Изучу.

Цитата Сообщение от Usaga Посмотреть сообщение
Зачем, тогда, вы на этот форум вообще заходите, если вам не важны ответы на ваши вопросы? Круг замыкается, не находите?
Нет, вы путаете тёплое и мягкое.

Добавлено через 2 минуты
Цитата Сообщение от Usaga Посмотреть сообщение
Всё секретно, но вы это разглашали, да?)
1. У меня много задач, а не одна (или вы считаете что я прямой как топор и 10 лет делаю только что-то одно?)
2. По той, что я дал, активность нулевая, значит ваш принцип не работает.

Добавлено через 2 минуты
Цитата Сообщение от Usaga Посмотреть сообщение
Считаю, что нет
Можете считать. У меня доп.образование по информационной безопасности. Если я криворукий кодер, то это не значит что я не умею зад вытирать или буквы не знаю.

Добавлено через 13 минут
Для читающих, решение (спасибо Usaga):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private static volatile string log_text = ""; // текст, который выводится
private static volatile int total = 0; // накопительная переменная цикла
private static void Worker(object _) // то, что передаётся таймеру для исполнения
{
    Console.WriteLine(log_text);
}
{
    Timer timer = new Timer(Worker, null, 0, 2000); // сам таймер
    log_text = String.Format("[{0}] Freq{1}: считаем частоты", sw.Elapsed.ToString(), tb); // формируем строку для вывода
    Parallel.ForEach(Partitioner.Create(0, ff.Count() - 1), (range) =>   // распараллеливаемый код
    {
        for (var v = range.Item1; v <= range.Item2; v++)
        {
            Interlocked.Add(ref total, 1); // увеличение переменной в потоках
            log_text = String.Format("[{0}] Freq{1}: {2}/{3}", sw.Elapsed.ToString(), tb, total, ff.Count()); // формируем строку для вывода
        }
    });
}
В итоге таймер раз в 2 секунды будет выводить тот текст, который был к этому моменту в переменной log_text.
а в переменной total будет накопительное значение числа итераций цикла.
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
06.12.2020, 11:19  [ТС]
типа получила продолжение.
и хотя скорость работы цикла с таким способом вывода выросла очень сильно, но тесты показали что если вывод исключить вообще, то увеличение скорости происходит на 15%, для вычислений длящихся несколько часов - это весомая часть.
можно ли как-то организовать вывод по таймеру, но чтобы сам вывод формировался в момент срабатывания таймера? В моем случае за 2000 мс вывод происходит 1 раз, а формирование log_text ~100000 раз. Сам пока придумал только вариант с выносом всех значимых переменных на глобальный уровень класса.

Добавлено через 9 минут
Цитата Сообщение от belalugoci Посмотреть сообщение
Сам пока придумал только вариант с выносом всех значимых переменных на глобальный уровень класса.
пока это решение помогло.
0
Эксперт .NET
 Аватар для Usaga
14780 / 9554 / 1366
Регистрация: 21.01.2016
Сообщений: 36,021
07.12.2020, 11:42
belalugoci, так и надо вывод по таймеру производить, а не на каждой итерации. Это расход ресурсов машины впустую.
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
07.12.2020, 12:24  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
так и надо вывод по таймеру производить, а не на каждой итерации. Это расход ресурсов машины впустую.
так вывод в обоих случаях происходит по таймеру.
0
Эксперт .NET
 Аватар для Usaga
14780 / 9554 / 1366
Регистрация: 21.01.2016
Сообщений: 36,021
07.12.2020, 12:26
belalugoci, нет, я имел в виду, что строку
C#
1
log_text = String.Format("[{0}] Freq{1}: {2}/{3}", sw.Elapsed.ToString(), tb, total, ff.Count());
надо в таймере формировать, а не на каждой итерации. На каждой итерации цикла достаточно увеличивать значение счётчика. А строку формировать только в момент вывода на экран. Иначе получается, что вы в пустую туеву хучу строк создаёте.
1
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
07.12.2020, 12:41  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
надо в таймере формировать, а не на каждой итерации
для меня в начале этой темы это не было очевидно.

Цитата Сообщение от Usaga Посмотреть сообщение
Иначе получается, что вы в пустую туеву хучу строк создаёте.
Ну вот как осознал, так и пришло озарение.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.12.2020, 12:41

Вывод данных в консоль
Задание такое: найти наибольшее значение из двух вещественных чисел. Проблема такая: хочу результатом программы получить такую таблицу: ...

Вывод данных на консоль
Здрасте. Есть такая часть кода: wstring subject = L&quot;Hello&quot;; wprintf(L&quot;Name: %s \n&quot;, subject); Почему она мне выводит на...

Вывод на консоль данных Multiset
Вобщем, задали следующее задание. Создать пустое мультиотображение (ключ - фамилия абонента, значение - номер телефона). С помощью метода...

Вывод структурированных данных на консоль
У меня такая ситуация вышла, короче создаю я обьекты, задаю им параметры, добовляю их в List&lt;&gt; но опросить коллецию не могу пишу так ...

Вывод данных из наследника в консоль
есть класс наследник &quot;Журнал&quot; от &quot;Товар&quot;, что нужно писать в &quot;Журнал&quot;, чтобы вывести его данные: название, кол-во , цена (это поля класса...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru