Load Testing with Custom Performance Counters: Listing 2.

The DataAccessCounterLocator class, which calls RecordOperation.

public class SqlServerCmsWebPageRepository :
  SqlServerCmsRepositoryBase <ICmsWebPage, 
  CmsDatasetTableAdapters.CmsWebPageTableAdapter >,
  ICmsWebPageRepository
{
  public override void Save(ICmsWebPage saveThis)
  {
    var startTicks = DateTime.Now.Ticks;

    try
    {
      DoSave(saveThis);
    }
    finally
    {
      // Call the locator to access OperationPerformanceCounterManager
      DataAccessCounterLocator.Instance.SaveWebPage.RecordOperation(
        DateTime.Now.Ticks - startTicks);
    }
  }

  // ...
}
public class DataAccessCounterLocator
{
  private static object m_SyncRoot = new object();

  private const string CategoryName = "Benday.com CMS Data Access";

  private DataAccessCounterLocator()
  {
    LoadWebPages = new OperationPerformanceCounterManager(
      CategoryName, "Load Web Pages");

    LoadWebPageById = new OperationPerformanceCounterManager(
      CategoryName, "Load Web Page By Id");

    SaveWebPage = new OperationPerformanceCounterManager(
      CategoryName, "Save Web Page");

    SaveFolder = new OperationPerformanceCounterManager(
      CategoryName, "Save Folder");

    SaveLink = new OperationPerformanceCounterManager(
      CategoryName, "Save Link");
  }

  public OperationPerformanceCounterManager 
    LoadWebPages { get; private set; }
  public OperationPerformanceCounterManager 
    SaveWebPage { get; private set; }
  public OperationPerformanceCounterManager 
    SaveFolder { get; private set; }
  public OperationPerformanceCounterManager 
    SaveLink { get; private set; }
  public OperationPerformanceCounterManager 
    LoadWebPageById { get; private set; }

  private static DataAccessCounterLocator m_Instance;
  public static DataAccessCounterLocator Instance
  {
    get
    {
      if (m_Instance == null)
      {
        lock (m_SyncRoot)
        {
          if (m_Instance == null)
          {
            m_Instance = new DataAccessCounterLocator();
          }
        }
      }

      return m_Instance;
    }
  }        // ...
}

About the Author

Benjamin Day is a consultant and trainer specializing in software best practices using Microsoft tools. Ben’s main areas of emphasis include Team Foundation Server, Scrum, software testing, and software architecture. He is a Microsoft Visual Studio ALM MVP, a certified Scrum trainer via Scrum.org, and a speaker at conferences such as TechEd and Visual Studio Live! When not developing software, Ben’s been known to go running and sea kayaking in order to balance out his love of cheese, cured meats, and champagne. He can be contacted via www.benday.com.

comments powered by Disqus

Featured

  • C# Language Server Revamps VS 2022 Razor Editor for ASP.NET Core

    Microsoft is touting new capabilities in ASP.NET Core web development in Visual Studio 2022 thanks to a new Razor editor powered by a Razor Language Server.

  • Windows Forms Lives On in .NET 6

    Windows Forms would like you to know that the reports of its death are greatly exaggerated.

  • Uno Platform 4.0 Adds Visual Studio Code Plugin

    Uno Platform 4.0 is out, highlighted by a new extension for working in Microsoft's Visual Studio Code editor.

  • .NET 6 Support Leads New GA Features in Azure Functions Fall Update

    Microsoft announced several new features that are now generally available in the fall update of Azure Functions, used for event-driven serverless computing in the cloud.

Upcoming Events