Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
01/12/18 13:33:23 (6 years ago)
Author:
abeham
Message:

#1614: Implemented changed behavior to measure execution time (cf. #2869)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/GeneralizedQAP/HeuristicLab.Optimization/3.3/Algorithms/BasicAlgorithm.cs

    r15367 r15603  
    2121
    2222using System;
    23 using System.Linq;
    2423using System.Threading;
    2524using HeuristicLab.Common;
     
    3231
    3332    private bool pausePending;
    34     private DateTime lastUpdateTime;
     33    private bool executionTimeActive;
    3534
    3635    public string Filename { get; set; }
     
    5251    }
    5352
     53    [Storable]
     54    private TimeSpan executionTime;
     55    private DateTime startDate;
     56    public override TimeSpan ExecutionTime {
     57      get { return executionTime + (executionTimeActive ? DateTime.UtcNow - startDate : TimeSpan.Zero); }
     58    }
     59
    5460    [StorableConstructor]
    5561    protected BasicAlgorithm(bool deserializing) : base(deserializing) { }
     
    5864      results = cloner.Clone(original.Results);
    5965      initialized = original.initialized;
     66      executionTime = original.executionTime;
    6067    }
    6168    protected BasicAlgorithm()
    6269      : base() {
    6370      results = new ResultCollection();
     71      executionTime = TimeSpan.Zero;
    6472    }
    6573
    6674    public override void Prepare() {
     75      executionTime = TimeSpan.Zero;
    6776      if (Problem == null) return;
    6877      base.Prepare();
     
    7382
    7483    public override void Start(CancellationToken cancellationToken) {
     84      startDate = DateTime.UtcNow;
     85      executionTimeActive = true;
    7586      base.Start(cancellationToken);
    7687      CancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
     
    117128    private void Run(object state) {
    118129      CancellationToken cancellationToken = (CancellationToken)state;
    119       lastUpdateTime = DateTime.UtcNow;
    120       System.Timers.Timer timer = new System.Timers.Timer(250);
    121       timer.AutoReset = true;
    122       timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
    123       timer.Start();
    124       try {
    125         if (!initialized)
    126           Initialize(cancellationToken);
    127         initialized = true;
    128         Run(cancellationToken);
    129       }
    130       finally {
    131         timer.Elapsed -= new System.Timers.ElapsedEventHandler(timer_Elapsed);
    132         timer.Stop();
    133         ExecutionTime += DateTime.UtcNow - lastUpdateTime;
    134       }
     130      if (!initialized)
     131        Initialize(cancellationToken);
     132      initialized = true;
     133      Run(cancellationToken);
    135134    }
    136135
     
    138137    protected abstract void Run(CancellationToken cancellationToken);
    139138
    140     #region Events
    141     private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
    142       System.Timers.Timer timer = (System.Timers.Timer)sender;
    143       timer.Enabled = false;
    144       DateTime now = DateTime.UtcNow;
    145       ExecutionTime += now - lastUpdateTime;
    146       lastUpdateTime = now;
    147       timer.Enabled = true;
     139    protected override void OnPaused() {
     140      executionTime += DateTime.UtcNow - startDate;
     141      executionTimeActive = false;
     142      base.OnPaused();
    148143    }
    149     #endregion
    150144
     145    protected override void OnStopped() {
     146      if (executionTimeActive) { // don't do if going from pause to stop
     147        executionTime += DateTime.UtcNow - startDate;
     148        executionTimeActive = false;
     149      }
     150      base.OnStopped();
     151    }
    151152  }
    152153}
Note: See TracChangeset for help on using the changeset viewer.