asp.net简单性能计数器---老赵版改良

 

 代码如下 复制代码

public static class CodeTimer
    {
        private static bool isQueryThreadCycleTime = false;

        public static void Initialize()
        {
            Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.High;
            Thread.CurrentThread.Priority = ThreadPriority.Highest;
            if (Environment.OSVersion.Platform == PlatformID.Win32NT && Environment.OSVersion.Version.Major >= 6)
            {
                isQueryThreadCycleTime = true;
            }
            Time("", 1, () => { });
        }

        public static void Time(string name, int iteration, Action action)
        {
            if (String.IsNullOrEmpty(name)) return;

            // warm up
            action();

            // 1.
            ConsoleColor currentForeColor = Console.ForegroundColor;
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine(name);

            // 2.
            GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
            int[] gcCounts = new int[GC.MaxGeneration + 1];
            for (int i = 0; i <= GC.MaxGeneration; i++)
            {
                gcCounts[i] = GC.CollectionCount(i);
            }

            // 3.
            Stopwatch watch = new Stopwatch();
            watch.Start();
            ulong cycleCount = GetCycleCount();
            for (int i = 0; i < iteration; i++) action();
            ulong cpuCycles = GetCycleCount() - cycleCount;
            watch.Stop();

            // 4.
            Console.ForegroundColor = currentForeColor;
            Console.WriteLine("tTime Elapsed:t" + watch.ElapsedMilliseconds.ToString("N0") + "ms");
            Console.WriteLine("tCPU Cycles:t" + cpuCycles.ToString("N0"));

            // 5.
            for (int i = 0; i <= GC.MaxGeneration; i++)
            {
                int count = GC.CollectionCount(i) - gcCounts[i];
                Console.WriteLine("tGen " + i + ": tt" + count);
            }

            Console.WriteLine();
        }

        private static ulong GetCycleCount()
        {
            ulong cycleCount = 0;
            if (isQueryThreadCycleTime)
            {
                QueryThreadCycleTime(GetCurrentThread(), ref cycleCount);
            }
            else
            {
                ulong l;
                ulong kernelTime, userTimer;
                GetThreadTimes(GetCurrentThread(), out l, out l, out kernelTime,
                  out userTimer);
                cycleCount = kernelTime + userTimer;
            }

            return cycleCount;
        }

        [DllImport("kernel32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool QueryThreadCycleTime(IntPtr threadHandle, ref ulong cycleTime);

        [DllImport("kernel32.dll")]
        static extern IntPtr GetCurrentThread();

        [DllImport("kernel32.dll", SetLastError = true)]
        static extern bool GetThreadTimes(IntPtr hThread, out ulong lpCreationTime,
           out ulong lpExitTime, out ulong lpKernelTime, out ulong lpUserTime);
    }

通读了下他们的代码,老赵版在win7下是完美的,eaglet版~~~他在自己的续也说了GetThreadTimes获取线程实际运行时间上是有偏差的,我多次测试的确很不稳定。

想来想去也没有什么办法可以改进的。。窝里是win7,公司的电脑是苦逼的xp。。也就是说我不能一个代码两个地方通吃。没办法改良下吧。

随便鄙视还有framework2.0的公司真恶心

时间: 2024-09-29 06:10:05

asp.net简单性能计数器---老赵版改良的相关文章

使用IE6看老赵的博客——比较完美版(可以在线查看、回复)

  上一个版本主要是测试一下我的想法,也是熟悉一下jQuery,代码这个东东不动手写一下是很难弄明白的.   有想法,写代码,出现错误,修改错误 = 不断进步.   带着问题去学习,动力就很大了.上一个版本能够看到了,但是还要修改URL,没看一篇都要改一下也太麻烦了.能不能点里面的连接,然后就直接看了呢?试了一下,很不幸又跳到那个郁闷的页面了.   怎么办呢?这就是问题.如何解决呢?修改连接,就是改一下a标签.点了之后不进行跳转不就行了吗?那我们还是来replace.   replace(/hr

asp+版本简单的留言板的制作(一)

asp+版本简单的留言板的制作(一)/*豆腐制作,都是精品http://www.asp888.net 豆腐技术站如转载,请保留版权信息*/前言:俗话说,眼看千遍,不如手写一遍,的确,很多纯粹理论性的东西,看多了,只是有了个简单的认识,其实在具体的程序调试过程中,肯定会遇到很多很多的问题一直想给大家写个什么程序的,但是 豆腐最近特别忙,年底了,什么事情都要结算,再加上我一直要想办法写一些文章来奉献给大家,终于抽出来一个下午,来做了一个这样的程序,结果忘记关OICQ了,很多的网友的信息 都没有时间回

asp+版本简单的留言板的制作(三)

asp+版本简单的留言板的制作(三)/*豆腐制作,都是精品http://www.asp888.net 豆腐技术站如转载,请保留版权信息*/现在该显示了,其实显示是很简单,只要看过豆腐前面文章的朋友应该都知道该怎么写这个程序,但是我在这里要强调的是 分页 的程序,我也和大家 一样,在开始的时候,想利用web form的数据绑定的功能,但是不幸的是,虽然用datagrid 实现绑定和分页都是很简单的,但是 datagrid显然形式上的Grid显然对 留言版 这样的程序是 不适合的,DBList 到是

老赵谈IL(3):IL可以看到的东西,其实大都也可以用C#来发现

在上一篇文章中,我们通过一些示例谈论了IL与CLR中的一些特性.IL与C#等高级语言的作用类似,主要用于表示程序的逻辑.由于它同样了解太多CLR中的高级特性,因此它在大部分情况下依旧无法展现出比那些高级语言更多的CLR细节.因此,如果您想要通过学习IL来了解CLR,那么这个过程很可能会"事倍功半".因此,从这个角度来说,老赵并不倾向于学习IL.不过严格说来,即使IL无法看出CLR的细节,也不足以说明"IL无用"--这里说"无用"自然有些夸张.但是

艾伟_转载:老赵谈IL(3):IL可以看到的东西,其实大都也可以用C#来发现

在上一篇文章中,我们通过一些示例谈论了IL与CLR中的一些特性.IL与C#等高级语言的作用类似,主要用于表示程序的逻辑.由于它同样了解太多CLR中的高级特性,因此它在大部分情况下依旧无法展现出比那些高级语言更多的CLR细节.因此,如果您想要通过学习IL来了解CLR,那么这个过程很可能会"事倍功半".因此,从这个角度来说,老赵并不倾向于学习IL.不过严格说来,即使IL无法看出CLR的细节,也不足以说明"IL无用"--这里说"无用"自然有些夸张.但是

艾伟:老赵谈IL(3):IL可以看到的东西,其实大都也可以用C#来发现

在上一篇文章中,我们通过一些示例谈论了IL与CLR中的一些特性.IL与C#等高级语言的作用类似,主要用于表示程序的逻辑.由于它同样了解太多CLR中的高级特性,因此它在大部分情况下依旧无法展现出比那些高级语言更多的CLR细节.因此,如果您想要通过学习IL来了解CLR,那么这个过程很可能会"事倍功半".因此,从这个角度来说,老赵并不倾向于学习IL.不过严格说来,即使IL无法看出CLR的细节,也不足以说明"IL无用"--这里说"无用"自然有些夸张.但是

asp+版本简单的留言板的制作(二)

asp+版本简单的留言板的制作(二)/*豆腐制作,都是精品http://www.asp888.net 豆腐技术站如转载,请保留版权信息*/ 在留言的录入界面完成后,自然要准备做留言内容的录入了.这个其中一个很关键的地方就是如何将我们在config.web 的内容读取出来,我用了下面的几条语句Dim Cfg as HashTableCfg = Context.GetConfig("appsettings")Conn = New SQLConnection(cfg("Conn&q

用 ASP 编写简单的日流量,最大日流量统计

流量|统计 用 ASP 编写简单的日流量,最大日流量统计----------------------------------------------------------------------------- <%'#########- 统计今日流量,最大日流量 -########## Sub My_Today_Counter() day1 = cstr(date()) '######- 获得当前日期 Day_Counter_File = Server.MapPath("Counter/

ASP实现简单的网页保护功能

网页 ASP实现简单的网页保护功能 (转)     说到安全,大家肯定会不由自主地想起类似防火墙之类的专业安全保障软件,难到非要有软件才能达到安全防范的目的吗?不,这里我们使用ASP,同样也能实现简单地防范网页安全的功能.下面笔者就举例来说明如何实现一个简单的页面安全防范功能,此页面只允许本单位内部网的用户访问,如果是单位外部用户进行访问则要求输入访问密码. 在此主要使用request对象的ServerVariables属性,通过它来获得环境变量的值.使   用的语法为:Request.Serv