Timer nie zlicza "tiknięć"

0

Witam mam problem, chcę obliczyć wydajność algorytmu rekurencyjnego Fibonacci i w tym celu stworzyłem timer ustawiłem interval na 1, i choć wykonanie kodu chwile zajmuje to jak ustawiłem breakpoint przy timer1_Tick nie weszło do niego ani razu...

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    public partial class Test : Form
    {
        public Test()
        {
            InitializeComponent();
        }
        int tik = 0;
        double tmp = 0;
        int n = 40;

        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Enabled = true;
            tmp = Metoda1(n);
            timer1.Enabled = false;      
            MessageBox.Show(tik.ToString());
            
        }

        private static double Metoda1(int n)
        {
            if (n <= 1) return n;
            else return Metoda1(n - 2) + Metoda1(n - 1);
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            tik++;
        }

    }
} 
1

tak zapytam, pewnie głupio, ale muszę bo mnie to nurtuje - naprawdę myślałeś, że to zadziała? Ale naprawdę?

To teraz krótkie wyjaśnienie - cały Twój program działa w jednym wątku, tzn. że nie możesz wykonać WIĘCEJ NIŻ JEDNEJ instrukcji w danym czasie. Co więcej program wykonuje się liniowo - tzn. jeśli wywołasz jakąkolwiek procedurę/funkcję to dopóki się ona nie skończy nie są obsługiwane żadne zdarzenia (np. od timera).

A teraz jak to się robi (znaczy jak się mierzy czas wykonania) - np. tak

0

Jestem tylko początkującym programistą, który zaczyna uczyć się we własnym zakresie, wiec nie musiałem tego wiedzieć, ale dziękuję za wyjaśnienie :)

A w backroundworkerze dałoby radę to zrobić ?

1

niby tak ale po pierwsze nawet jeśli ustawisz timerowi interval na 1 to nie masz gwarancji, że dokładnie co taki okres czasu dostaniesz "tick". Poza tym nawet jak ustawisz na 1 to faktycznie będziesz miał tick co ok 10 (czy nawet jeszcze więcej).
Czas wykonania mierzy się tak jak Ci podałem

1 użytkowników online, w tym zalogowanych: 0, gości: 1