File: ClientConfigPerf.cs

package info (click to toggle)
mono 4.6.2.7%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 778,148 kB
  • ctags: 914,052
  • sloc: cs: 5,779,509; xml: 2,773,713; ansic: 432,645; sh: 14,749; makefile: 12,361; perl: 2,488; python: 1,434; cpp: 849; asm: 531; sql: 95; sed: 16; php: 1
file content (97 lines) | stat: -rw-r--r-- 3,046 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
//------------------------------------------------------------------------------
// <copyright file="ClientConfigPerf.cs" company="Microsoft">
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>
//------------------------------------------------------------------------------

namespace System.Configuration {
    using System.Configuration.Internal;
    using System.Globalization;
    using System.Collections;
    using System.IO;
    using System.Xml;
    using System.Security;
    using System.Security.Permissions;
    using System.Threading;
    using System.Net;
    using Assembly = System.Reflection.Assembly;
    using StringBuilder = System.Text.StringBuilder;

#if NOPERF
    internal class ClientConfigPerf {
        const int SIZE=100;

        long[]      _counters;
        long[]      _totals;
        string[]    _names;
        int         _current;
        bool        _enabled;

        static internal ClientConfigPerf ConfigSystem = new ClientConfigPerf(false);
        static internal ClientConfigPerf ScanSections = new ClientConfigPerf(false);
        static internal ClientConfigPerf CopySection = new ClientConfigPerf(false);
        static internal ClientConfigPerf CopyXmlNode = new ClientConfigPerf(false);
        static internal ClientConfigPerf GetConfig = new ClientConfigPerf(true);

        ClientConfigPerf(bool enabled) {
#if PERF
            _enabled = enabled;
            if (_enabled) {
                _counters = new long[SIZE];
                _totals = new long[SIZE];
                _names = new string[SIZE];
            }
#endif
        }

        internal void Reset() {
#if PERF
            _current = 0;
#endif
        }

        internal void Record(string name) {
#if PERF
            if (_enabled && _current < _counters.Length) {
                _names[_current] = name;
                Microsoft.Win32.SafeNativeMethods.QueryPerformanceCounter(out _counters[_current]);
                if (_current > 0) {
                    _totals[_current] += _counters[_current] - _counters[_current - 1];
                }

                _current++;
            }
#endif
        }

        void DoPrint() {
#if PERF
            if (_enabled) {
                long lfreq = 0;
                Microsoft.Win32.SafeNativeMethods.QueryPerformanceFrequency(out lfreq);
                double freq = (double) lfreq;
                double grandtotal = 0;

                for (int i = 0; i < _current; i++) {
                    double time = ((double)_totals[i]) / freq;
                    grandtotal += time;
                    Console.WriteLine("{0,-20} : {1:F6}", _names[i], time);
                }

                Console.WriteLine("{0,-20} : {1:F6}\n", "TOTAL", grandtotal);
            }
#endif
        }

        public static void Print() {
#if PERF
            ConfigSystem.DoPrint();
            ScanSections.DoPrint();
            CopySection.DoPrint();
            CopyXmlNode.DoPrint();
            GetConfig.DoPrint();
#endif
        }
    }
#endif
}