|
//------------------------------------------------------------------------------
// <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
}
|