Использование секундомера для оценки использования приложения

Привет, я пытаюсь создать глобальный класс, который я могу использовать в своих проектах, я намерен использовать его в качестве шаблона по умолчанию, я новичок, поэтому, пожалуйста, будьте терпеливы;)

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

Я подозреваю, что я совершенно ошибочен в своем дизайне, так как я хочу секундомер Masterstopwatch = new Stopwatch(); быть объявленным глобально без использования метода, я подозреваю, что это невозможно, но мне нужно спросить спасибо

1 ответ

Решение

Похоже, вам нужен шаблон Singleton.

Если вы объявите обертку вокруг секундомера следующим образом, вы сможете использовать ее в любом месте вашего приложения и получить доступ к тому же экземпляру секундомера.

// 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();
    }
}
Другие вопросы по тегам