Как в C# зафиксировать время отработки кода

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 085
Благодарностей
29
Баллы
48
Всем привет, после длительной работы, программа иногда зависает в определенном месте и что бы определить было зависание или нет. Для этого
перед началом кода запускаю таймер и если в коде этот таймер в минутах или секундах превысит заданное значение, то выход по ошибке. Как этот код реализовать?
 

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 267
Благодарностей
687
Баллы
113
Всем привет, после длительной работы, программа иногда зависает в определенном месте и что бы определить было зависание или нет. Для этого
перед началом кода запускаю таймер и если в коде этот таймер в минутах или секундах превысит заданное значение, то выход по ошибке. Как этот код реализовать?
C#:
        Stopwatch stopwatch = new Stopwatch();
 
        stopwatch.Start();
       // Твой код
        stopwatch.Stop();
var result = stopwatch.ElapsedMilliseconds
Передаешь объект в доп поток и там уже чекаешь че по времени
 

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 267
Благодарностей
687
Баллы
113
Всем привет, после длительной работы, программа иногда зависает в определенном месте и что бы определить было зависание или нет. Для этого
перед началом кода запускаю таймер и если в коде этот таймер в минутах или секундах превысит заданное значение, то выход по ошибке. Как этот код реализовать?
Типа такого

C#:
     public static void Main(string[] args)
     {
         Stopwatch stopwatch = new Stopwatch();

         stopwatch.Start();//Запускаем таймер
         CheckTimeAsync(stopwatch);//Запускаем проверку времени

         Thread.Sleep(15000); //Имитируем деятельность

         stopwatch.Stop();//Стопаем таймер
     }
     static void CheckTime(Stopwatch  stopwatch)
     {
         Thread.Sleep(1000);

         if (stopwatch.ElapsedMilliseconds > 5000)
             Console.WriteLine("Прошло больше чем 5 секунд. " + stopwatch.ElapsedMilliseconds);
     } //Метод для проверки чё там по времени
     public static async Task CheckTimeAsync(Stopwatch  stopwatch)
     {
         while (true)
         {
             await Task.Run(() => CheckTime(stopwatch));
         }
     } //Запускаем проверку времени в доп потоке
 

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 085
Благодарностей
29
Баллы
48
C#:
        Stopwatch stopwatch = new Stopwatch();

        stopwatch.Start();
       // Твой код
        stopwatch.Stop();
var result = stopwatch.ElapsedMilliseconds
Передаешь объект в доп поток и там уже чекаешь че по времени
Выдало ошибку
"The type or namespace name 'Stopwatch' could not be found (are you missing a using directive or an assembly reference?)". [Строка: 1; Cтолбец: 27]
 

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 267
Благодарностей
687
Баллы
113
Выдало ошибку
"The type or namespace name 'Stopwatch' could not be found (are you missing a using directive or an assembly reference?)". [Строка: 1; Cтолбец: 27]
так юзинги подрубить надо

C#:
using System.Threading;
using System.Threading.Tasks;
using System.Diagnostics;
Либо явно пространства указывать

C#:
        public static void Main(string[] args)
        {
            System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();

            stopwatch.Start();//Запускаем таймер
            CheckTimeAsync(stopwatch);//Запускаем проверку времени

            System.Threading.Thread.Sleep(15000); //Имитируем деятельность
            stopwatch.Stop();//Стопаем таймер
        }
        static void CheckTime(System.Diagnostics.Stopwatch  stopwatch)
        {
            System.Threading.Thread.Sleep(1000);

            if (stopwatch.ElapsedMilliseconds > 5000)
                Console.WriteLine("Прошло больше чем 5 секунд. " + stopwatch.ElapsedMilliseconds);
        } //Метод для проверки чё там по времени
        public static async System.Threading.Tasks.Task CheckTimeAsync(System.Diagnostics.Stopwatch  stopwatch)
        {
            while (true)
            {
                await System.Threading.Tasks.Task.Run(() => CheckTime(stopwatch));
            }
        } //Запускаем проверку времени в доп потоке
    }
 

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 085
Благодарностей
29
Баллы
48
так юзинги подрубить надо

C#:
using System.Threading;
using System.Threading.Tasks;
using System.Diagnostics;
Либо явно пространства указывать

C#:
        public static void Main(string[] args)
        {
            System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();

            stopwatch.Start();//Запускаем таймер
            CheckTimeAsync(stopwatch);//Запускаем проверку времени

            System.Threading.Thread.Sleep(15000); //Имитируем деятельность
            stopwatch.Stop();//Стопаем таймер
        }
        static void CheckTime(System.Diagnostics.Stopwatch  stopwatch)
        {
            System.Threading.Thread.Sleep(1000);

            if (stopwatch.ElapsedMilliseconds > 5000)
                Console.WriteLine("Прошло больше чем 5 секунд. " + stopwatch.ElapsedMilliseconds);
        } //Метод для проверки чё там по времени
        public static async System.Threading.Tasks.Task CheckTimeAsync(System.Diagnostics.Stopwatch  stopwatch)
        {
            while (true)
            {
                await System.Threading.Tasks.Task.Run(() => CheckTime(stopwatch));
            }
        } //Запускаем проверку времени в доп потоке
    }
Спасибо, а если нужно время выполнения через несколько кубиков. Т.е запустил таймер, отработало несколько кубиков, определяю сколько времени прошло
 

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 267
Благодарностей
687
Баллы
113
Спасибо, а если нужно время выполнения через несколько кубиков. Т.е запустил таймер, отработало несколько кубиков, определяю сколько времени прошло
Пожалуйста, на сколько я знаю объекты через кубики передавать не получится, думаю надо всё это дело запихивать в общий код, а из кубиков уже в общий код обращаться и состояние определять. Методы все статичные, думаю норм будет
 

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 085
Благодарностей
29
Баллы
48
может кто нибудь подскажет
 

Ахилес

Client
Read only
Регистрация
11.11.2020
Сообщения
956
Благодарностей
392
Баллы
63
Спасибо, а если нужно время выполнения через несколько кубиков. Т.е запустил таймер, отработало несколько кубиков, определяю сколько времени прошло
сохраняй время в переменную, потом сравнивай текущее время и сохраненное. как работать со временем, на форуме есть очень много примеров и целых статей.
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 788
Благодарностей
2 454
Баллы
113
Спасибо, а если нужно время выполнения через несколько кубиков. Т.е запустил таймер, отработало несколько кубиков, определяю сколько времени прошло
Создаем объект и пихаем в контекст
первый кубик:
project.Context["sw"] = System.Diagnostics.Stopwatch.StartNew();
Когда нужно остановить - вызываем:
любой другой кубик в любом месте:
var sw = project.Context["sw"];
sw.Stop();
project.SendInfoToLog(string.Format("Стоп: {0:c} ms", sw.Elapsed));
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)