File: ClientConfigPerf.cs

package info (click to toggle)
mono 6.12.0.199%2Bdfsg-6
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 1,296,836 kB
  • sloc: cs: 11,181,803; xml: 2,850,076; ansic: 699,709; cpp: 123,344; perl: 59,361; javascript: 30,841; asm: 21,853; makefile: 20,405; sh: 15,009; python: 4,839; pascal: 925; sql: 859; 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
}