using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using  System.Collections;
using System.Diagnostics;
using System.Data;
using System.Diagnostics;

namespace MetroGraphApp
{
    public class 耗时监视_防止卡死
    {


        public static Hashtable sudu_time_watchs = new Hashtable();

        public static void v2_add_sudu_time_watch_and_reset(string watch_id)
        {


            Stopwatch pw1 = null;
            if (!sudu_time_watchs.ContainsKey(watch_id))
            {
                pw1 = new Stopwatch();
                sudu_time_watchs.Add(watch_id, pw1);
            }
            else
            {

                pw1 = sudu_time_watchs[watch_id] as Stopwatch;

                pw1.Reset();

            }


            pw1.Start();

        }
        public static Hashtable max_sudu_times = new Hashtable();
        public static long zong_max_sudu_times = 0;
        public static void v2_init_sudu_time_watch()
        {

            zong_max_sudu_times = 0;
            max_sudu_times = new Hashtable();
            sudu_time_watchs = new Hashtable();

        }

        public static string get_sudu_haoshi_list()
        {


           Hashtable rttimezongs = max_sudu_times;

            string rtt1 = "";
            foreach (string kewy in rttimezongs.Keys)
            {


                rtt1 = rtt1 + kewy + "操作最大耗时:" + rttimezongs[kewy].ToString() + " ticks\r\n";


            }


            return rtt1+"----------------------------------\r\n";


        }

        public static DateTime last_save_time = DateTime.Now;

      public static void save_per_times()
        {

            if ((DateTime.Now - last_save_time).TotalMilliseconds > 1000)
            {
                last_save_time = DateTime.Now;


                zhongkaiKB0pc.Libs.file_rw fwww = new zhongkaiKB0pc.Libs.file_rw();


                fwww.write_a_file(zhongkaiKB0pc.Libs.log.get_cur_path() + "err"  + "/----------耗时list--------"+ ".txt", 耗时监视_防止卡死.get_sudu_haoshi_list()+"\r\n" + DateTime.Now.ToString() + "\r\n");
                 

            }

        }


        public static long v2_get_and_stop_sudu_time_watch(string watch_id)
        {

            Stopwatch pw1 = null;
            if (sudu_time_watchs.ContainsKey(watch_id))
            {
                pw1 = sudu_time_watchs[watch_id] as Stopwatch;
                pw1.Stop();
                if (pw1.ElapsedTicks > zong_max_sudu_times)
                {
                    zong_max_sudu_times = pw1.ElapsedTicks;

                }

                if (!max_sudu_times.Contains(watch_id))
                {


                    max_sudu_times.Add(watch_id, pw1.ElapsedTicks);

                }
                else
                {
                    long oldzo1 = (long)(max_sudu_times[watch_id]);
                    if (pw1.ElapsedTicks > oldzo1)
                    {


                        max_sudu_times[watch_id] = pw1.ElapsedTicks;

                    }


                }


                return pw1.ElapsedTicks;


            }

            return 0;

        }


    }
}

用法如下:

     耗时监视_防止卡死.v2_add_sudu_time_watch_and_reset("bak_进度001");

           bak_进度(is_Sandox1);//这个必须单线程里 bak_进度,不然不稳定!

      耗时监视_防止卡死.v2_get_and_stop_sudu_time_watch("bak_进度001");
 

   。。。。。。。。。。

   
                    耗时监视_防止卡死.save_per_times();

  zhongkaiKB0pc.Libs.file_rw 改成你自己的IO写文件的代码类即可

                    

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐