الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيفية حساب الوقت الذي يستغرقة البرنامج

مغلق
بدأه eng_barakat في 2 ديسمبر 2005 · 8 رد · 1,241 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلا م عليكم ورحمة الله

عودة لكم احبابي بعد انقطاع لمدة 6 اشهر بسبب العمل والدراسة

تواجهني مشكلة هي اني اريد ان احسب الوقت الذي يستغرقة البرنامج او داله معينة بحيث يمكنني المقارنة بين وقتها ووقت دالة اخري

لذا انا جربت طريقة وهي استخدام

Enviroment.Tickcount

لكن الناتج يطلع صفر حيث تقوم هذةالخاصية بارجاع الوقت الذي استغرقة الكمبيوتر في العمل حتي الان بالميللي ثانية

واكون بمناداداتها بعد وقبل الدالة المراد حساب الوقت المستغرق في تنفيذها ثم طرح الرقمين لكن للاسف يطلع صفر رغم ان البرننامج معقد شوية

في انتظار طريقة اخري ناجعة ولكمم مني تحية

B)

#2

بسم الله الرحمن الرحيم

   
            private void Algo1()
        {
            // نقوم بعملية حفظ لقيمة عداد الوقت الحالي
            int StartTime = Environment.TickCount;

            //     أكتب الكود الذي تريد كمثال نكتب
            for (int I = 0; I <= 1000000; I++)
            {
                //مثال فقط لا غير نقوم بإنشاء أوبجكت ومن ثم نجبر محمع النفايات ليتم حذف الكائن من الذاكرة بشكل كلي
                object o = new object();
                GC.SuppressFinalize(o);
            }

            // نقوم بعملية حفظ لقيمة عداد الوقت الحالي بعد أن تم الإنتهاء من عمل الخوارزمية
            int EndTime = Environment.TickCount;

            // نقوم بطرح الوقت البداية من وقت النهاية فينتج عندنا الفرق
            TimeSpan AlgoTime = TimeSpan.FromTicks(EndTime - StartTime);
            System.Windows.Forms.MessageBox.Show(AlgoTime.Ticks.ToString());

            //الإضهار على شكل وقت
            System.Windows.Forms.MessageBox.Show(AlgoTime.ToString());
        }

أتمنى أن تكون قد وصلت لما تريد

لا تفعل إلا ما تستطيع أن تقوله ولا تقول إلا ما تسطيع أن تفعله

اللهم علمنا ما ينفعنا ونفعنا بما علمتنا وهب لنا من لدنك ولياً مرشدا

كلما أدبني الدهر أراني نقص عقلي ... وإذا ما زدت علماً زادني علماً بجهلي

أخوكم في الله أبو المجد

هيا نتعلم بعض المبادء لنطرق باب الإحتراف ************** جديد الدروس ( Application Domains and Assemblies)

التوقيت في دمشق:

<embed src="http://www.clocklink.com/clocks/0006-Gray.swf?TimeZone=R1T" width="200" height="240" wmode="transparent" type="application/x-shockwave-flash">

#3

أخي العزيز بارك الله فيك

الصراحة انا عملت هكذا بالضبط لكن المشكلة ان الوقت النهائي يطلع صفر ؟؟؟

لذا انا اسئل هل هناك طرق أخري

ولكم مني تحية

#4

لا تستغرب إذا خففت عدد الحلقة في مثالنا هذا سوف تجد الناتج صفر

لا تفعل إلا ما تستطيع أن تقوله ولا تقول إلا ما تسطيع أن تفعله

اللهم علمنا ما ينفعنا ونفعنا بما علمتنا وهب لنا من لدنك ولياً مرشدا

كلما أدبني الدهر أراني نقص عقلي ... وإذا ما زدت علماً زادني علماً بجهلي

أخوكم في الله أبو المجد

هيا نتعلم بعض المبادء لنطرق باب الإحتراف ************** جديد الدروس ( Application Domains and Assemblies)

التوقيت في دمشق:

<embed src="http://www.clocklink.com/clocks/0006-Gray.swf?TimeZone=R1T" width="200" height="240" wmode="transparent" type="application/x-shockwave-flash">

#5

مرحبا بعودتك أخي الكريم.

لماذا لا تستخدم DateTime.Now في معرفة الوقت الحالي وتضعه في متغير وذلك قبل البدء في العمليه التي تريدها , وبعد انتهاء العمليه تطرحه من DateTime.Now وتضع الناتج في TimeSpan. ؟ أقصد هكذا :

DateTime startTime = DateTime.Now;

YourMethodOrWhatEver();

TimeSpan tSpan = DateTime.Now - startTime;

int mnts = tSpan.Minutes;
int ors = tSpan.Hours
// and so on

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#6

بسم الله الرحمن الرحيم

أخي العزيز معتز إذا أستخدمنا DateTime يمكن أن تستخدم الخوازمية أجزاء من الثانية في مثالك لن نستيع أن نعرف كم الوقت المقدر

فأرجو منك أستخدم المثال الأول فهو فعال نوعاً ما

وإن شاء الله سوف نتحدث في موضوع آخر عن الوقت الذي أستخدمته الخوارزمية بالضبط لأن يمكن أن يعمل مجموعة من الـ Thread مشتركين في وقت المعالج في مثالنا الأول سوف نحسب كل الوق بدون معرفة الوقت الذي أستخدمته الخوارزمية بالضبط

لا تفعل إلا ما تستطيع أن تقوله ولا تقول إلا ما تسطيع أن تفعله

اللهم علمنا ما ينفعنا ونفعنا بما علمتنا وهب لنا من لدنك ولياً مرشدا

كلما أدبني الدهر أراني نقص عقلي ... وإذا ما زدت علماً زادني علماً بجهلي

أخوكم في الله أبو المجد

هيا نتعلم بعض المبادء لنطرق باب الإحتراف ************** جديد الدروس ( Application Domains and Assemblies)

التوقيت في دمشق:

<embed src="http://www.clocklink.com/clocks/0006-Gray.swf?TimeZone=R1T" width="200" height="240" wmode="transparent" type="application/x-shockwave-flash">

#7

السلام عليكم

اذا كنت تعمل على c#2005 فيوجد فئة جديدة هىStopwatch وهى تقوم بحساب الوقت لتنفيذ مقطع من الكود

انظر الكود التالى

Module TimeCode
    
    Sub Main( )
        Dim Watch As New Stopwatch( )
    
        Watch.Start( )
    
        ' Delay for a while.
        For i As Integer = 1 To 1000000000
        Next
    
        Watch.Stop( )
    
        ' Report the elasped time.
        Console.WriteLine("Milliseconds " & Watch.ElapsedMilliseconds)
        Console.WriteLine("Ticks: " & Watch.ElapsedTicks)
        Console.WriteLine("Frequency: " & Stopwatch.Frequency)
        Console.WriteLine("Whole Seconds: " & Watch.Elapsed.Seconds)
        Console.WriteLine("Seconds (from TimeSpan): " & Watch.Elapsed.TotalSeconds)
        Console.WriteLine("Seconds (most precise): " & _
          Watch.ElapsedTicks / Stopwatch.Frequency)
    End Sub
    
End Module

الكود السابق بلغة VB.NET وولكنه مفهوم

بالتوفيق

تم تعديل هذه المشاركة بواسطة SOLO.NET في 3 ديسمبر 2005 في 15:28

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#8

بسم الله الرحمن الرحيم

هنا نستطيع أن نعرف الوقت الفعلي الذي أستغرقته الخوارزمية لتنفيذ

        private void button1_Click(object sender, EventArgs e)
        {

            int StartTime = Environment.TickCount;
            TimeSpan StartTime1 = System.Diagnostics.Process.GetCurrentProcess().TotalProcessorTime;

            for (int I = 0; I <= 100000000; I++)
            {
                object o = new object();
                GC.SuppressFinalize(o);
            }

            int EndTime = Environment.TickCount;
            TimeSpan EndTime1 = System.Diagnostics.Process.GetCurrentProcess().TotalProcessorTime;

            TimeSpan AlgoTime = TimeSpan.FromTicks(EndTime - StartTime);
            TimeSpan T = EndTime1 - StartTime1;


            MessageBox.Show(String.Format("Via TickCount: {0}\n Via TotalProcessorTime: {1}", AlgoTime, T));
        }

كبر عداد الحلقة سقم بتشغيل أكثر من برنامج مثل الورد أن قم بنسخ ملفات أي لتقوم بشغل المعالج بتنفيذ أمر آخر ستجد أن النتائج تختلف فالأول سوف يعطيك الوقت الكلي أما الثاني سوف يعطيك كم أستغرك الخوارزمية من وقت المعالج

أرجو من الله التوفيق

تم تعديل هذه المشاركة بواسطة TarekNajem04 في 3 ديسمبر 2005 في 16:04

لا تفعل إلا ما تستطيع أن تقوله ولا تقول إلا ما تسطيع أن تفعله

اللهم علمنا ما ينفعنا ونفعنا بما علمتنا وهب لنا من لدنك ولياً مرشدا

كلما أدبني الدهر أراني نقص عقلي ... وإذا ما زدت علماً زادني علماً بجهلي

أخوكم في الله أبو المجد

هيا نتعلم بعض المبادء لنطرق باب الإحتراف ************** جديد الدروس ( Application Domains and Assemblies)

التوقيت في دمشق:

<embed src="http://www.clocklink.com/clocks/0006-Gray.swf?TimeZone=R1T" width="200" height="240" wmode="transparent" type="application/x-shockwave-flash">

#9

جيد للغاية جزاكم الله خيرا

هذا الموضوع مغلق.

مواضيع مشابهة