使用秒表来测试应用程序使用情况

4

你好,我正在尝试创建一个全局类,以便在我的项目中使用。我打算将其用作默认模板,由于我是新手,请耐心等待;)

Stopwatch Masterstopwatch = new Stopwatch();

#if DEBUG

    private static void ApplicationLogStart()
    {
        StartTime = DateTime.Now;
        Masterstopwatch.Start();

        String eventName = "Program Loaded";
        String errorDetails = "Program has started Succesfully";
        DataLogEntry(eventName, errorDetails);
    }
    private static void ApplicationLogclosing()
    {
        String eventName = "Program is closing";
        String errorDetails = "Program has closed Succesfully";
        DataLogEntry(eventName, errorDetails);
        StopTime = DateTime.Now;
        Masterstopwatch.Stop();
        Benchmark(StartTime,StopTime,Masterstopwatch.Elapsed);
    }
#endif

我怀疑我的设计存在根本性缺陷,因为我想要在不使用方法的情况下全局声明Stopwatch Masterstopwatch = new Stopwatch();。我怀疑这是不可能的,但我需要问一下。

1个回答

7
听起来你需要单例模式。如果你声明一个围绕计时器的包装器,你可以在应用程序的任何地方使用它,并访问一个Stopwatch的相同实例。
// Declare singleton wrapper of a stopwatch, which instantiates stopwatch
// on construction
public class StopwatchProxy 
{
    private Stopwatch _stopwatch;
    private static readonly StopwatchProxy _stopwatchProxy = new StopwatchProxy();

    private StopwatchProxy()
    {
        _stopwatch = new Stopwatch();
    }

    public Stopwatch Stopwatch { get { return _stopwatch; } } 

    public static StopwatchProxy Instance
    { 
        get { return _stopwatchProxy; }
    }
}

// Use singleton
class Foo
{
    void Foo()
    {
        // Stopwatch instance here
        StopwatchProxy.Instance.Stopwatch.Start();
    }
}

class Bar
{
    void Bar()
    {
        // Is the same instance as here
        StopwatchProxy.Instance.Stopwatch.Stop();
    }
}

我在这里没有看到正确的单例模式。这根本不是线程安全的。 - Tomas Voracek
1
我非常确定这是正确的,因为.NET运行时确保private static readonly _stopwatchProxy = new StopwatchProxy()每个AppDomain只调用一次。请参阅http://msdn.microsoft.com/en-us/library/aa645612.aspx获取信息。 - Dr. Andrew Burnett-Thompson
哈。不知道这个。每天都有新的东西可以学习。 - Tomas Voracek
1
公平地说,我也不得不检查一下;-) 这样可以避免双重锁定和所有这些繁琐的事情。当被问到一个追求严谨的面试问题时,这也很方便! - Dr. Andrew Burnett-Thompson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接