folder Tahribat.com Forumları
linefolder C#, Asp.Net, .Net Core
linefolder C# Multithreading Ve İşlem Süresi Hesabı



C# Multithreading Ve İşlem Süresi Hesabı

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wasd
    wasd's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek
    Thread th = new Thread(o => { SetText((string)o); });
    Stopwatch watch = new Stopwatch();
    watch.Start();
    //işlemlerim
    watch.stop();
    string sure = Convert.ToString((double)watch.Elapsed.Milliseconds / 1000);
    th.Start(sure);

    şeklinde yazdığım kodun çalışma zamanını hesaplamak istiyorum ama thread olayını tam bilmediğimden birtürlü yapamıyorum. Bu konuda bana yardımcı olabilecek kimse varmı? msdn, stackoverflow falan bakındım biraz ama yapamadım.


    :)
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    FCN
    FCN's avatar
    Kayıt Tarihi: 28/Eylül/2007
    Erkek

    backgroundworker kullanarak progressi çok rahat gösterebilirsin. işini görürse bi araştır. 

  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wasd
    wasd's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    bi araştırıyım deniyim, sonucu yazarım. Çok sağol :)

    sonuç: backgroundworkerı kullandım kullanmaya ama işlem süresini hesaplamıyo bu seferde, süre hep sıfır çıkıyo

    wasd tarafından 03/Nis/13 17:21 tarihinde düzenlenmiştir

    :)
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    Kullandığım bi yöntem var threadpool da asenkron çalıştırma. Onla ilgili bir örnek yaptım şimdi 

    bir class oluştur ben ismine UnbalancedThreadTester dedim 

    using System.Diagnostics;
    using System.Threading;
    
    namespace ThreadTester
    {
        public class UnbalancedThreadTester
        {
    
            public delegate void ThreadTesting(string result);
            public event ThreadTesting Tested;
    
            private void OnTested(string result)
            {
                if (Tested != null)
                    Tested(result + " saniye");
            }
    
            
            public void Basla(int count)
            {
                
                ThreadPool.QueueUserWorkItem(new WaitCallback(DoSomething),count);
    
            }
                 
            private void DoSomething(object lastNumber)
            {
                Stopwatch watch = new Stopwatch();
                
                int last = (int) lastNumber;
                
                watch.Start();
                for (int i = 0; i < last; i++)
                {
                Thread.Sleep(100);
                }   
    
                watch.Stop();
                double time = watch.Elapsed.TotalSeconds;
                OnTested(time.ToString());
            }
        }
    }

     

     

    class bittikten sonra bir tane buton oluştur ve click eventini aşağıdaki şekilde yaz (ben butonun ismini  BtnStartTest koydum)

             private void BtnStartTest_Click(object sender, EventArgs e)
            {
                UnbalancedThreadTester unbTester = new UnbalancedThreadTester();
                unbTester.Tested += new UnbalancedThreadTester.ThreadTesting(unbTester_Tested);
                unbTester.Basla(50);
            }
    
            private void unbTester_Tested(string result)
            {
                MessageBox.Show(result);
            }
    

     

     

     

    dosomething metodunun içindeki işlem bittikten sonra formda bulunan unbTester_Tested metodu tetiklenecektir ve resultta bize işlemin ne kadar sürede tamamlandığı bildilrilecek..

    asenkron olduğu için bağımsız olarak tekrar tekrar çalıştırılabilir ve kiltilenmez.. (tabii belli bir limiti var..) mesela ardarda bir kaç kez butona tıkladığımda sonuç şu şekilde :)

     

     

    umarım işine yarar :)

    unbalanced tarafından 03/Nis/13 18:02 tarihinde düzenlenmiştir

    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
Toplam Hit: 1280 Toplam Mesaj: 4