The Labs \ Source Viewer \ SSCLI \ System.Configuration \ ClientConfigPerf

  1. //------------------------------------------------------------------------------
  2. // <copyright file="ClientConfigPerf.cs" company="Microsoft">
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. // </copyright>
  14. //------------------------------------------------------------------------------
  15. namespace System.Configuration
  16. {
  17.     using System.Configuration.Internal;
  18.     using System.Globalization;
  19.     using System.Collections;
  20.     using System.IO;
  21.     using System.Xml;
  22.     using System.Security;
  23.     using System.Security.Permissions;
  24.     using System.Threading;
  25.     using System.Net;
  26.     using Assembly = System.Reflection.Assembly;
  27.     using StringBuilder = System.Text.StringBuilder;
  28.    
  29.     #if NOPERF
  30.     internal class ClientConfigPerf
  31.     {
  32.         const int SIZE = 100;
  33.        
  34.         long[] _counters;
  35.         long[] _totals;
  36.         string[] _names;
  37.         int _current;
  38.         bool _enabled;
  39.        
  40.         static internal ClientConfigPerf ConfigSystem = new ClientConfigPerf(false);
  41.         static internal ClientConfigPerf ScanSections = new ClientConfigPerf(false);
  42.         static internal ClientConfigPerf CopySection = new ClientConfigPerf(false);
  43.         static internal ClientConfigPerf CopyXmlNode = new ClientConfigPerf(false);
  44.         static internal ClientConfigPerf GetConfig = new ClientConfigPerf(true);
  45.        
  46.         ClientConfigPerf(bool enabled)
  47.         {
  48.             #if PERF
  49.             _enabled = enabled;
  50.             if (_enabled) {
  51.                 _counters = new long[SIZE];
  52.                 _totals = new long[SIZE];
  53.                 _names = new string[SIZE];
  54.             }
  55.             #endif
  56.         }
  57.        
  58.         internal void Reset()
  59.         {
  60.             #if PERF
  61.             _current = 0;
  62.             #endif
  63.         }
  64.        
  65.         internal void Record(string name)
  66.         {
  67.             #if PERF
  68.             if (_enabled && _current < _counters.Length) {
  69.                 _names[_current] = name;
  70.                 Microsoft.Win32.SafeNativeMethods.QueryPerformanceCounter(out _counters[_current]);
  71.                 if (_current > 0) {
  72.                     _totals[_current] += _counters[_current] - _counters[_current - 1];
  73.                 }
  74.                
  75.                 _current++;
  76.             }
  77.             #endif
  78.         }
  79.        
  80.         void DoPrint()
  81.         {
  82.             #if PERF
  83.             if (_enabled) {
  84.                 long lfreq = 0;
  85.                 Microsoft.Win32.SafeNativeMethods.QueryPerformanceFrequency(out lfreq);
  86.                 double freq = (double)lfreq;
  87.                 double grandtotal = 0;
  88.                
  89.                 for (int i = 0; i < _current; i++) {
  90.                     double time = ((double)_totals[i]) / freq;
  91.                     grandtotal += time;
  92.                     Console.WriteLine("{0,-20} : {1:F6}", _names[i], time);
  93.                 }
  94.                
  95.                 Console.WriteLine("{0,-20} : {1:F6}\n", "TOTAL", grandtotal);
  96.             }
  97.             #endif
  98.         }
  99.        
  100.         public static void Print()
  101.         {
  102.             #if PERF
  103.             ConfigSystem.DoPrint();
  104.             ScanSections.DoPrint();
  105.             CopySection.DoPrint();
  106.             CopyXmlNode.DoPrint();
  107.             GetConfig.DoPrint();
  108.             #endif
  109.         }
  110.     }
  111.     #endif
  112. }

Developer Fusion