1 ضمیمه
نقل قول: وی بی .نت یا ..... ؟
نقل قول:
نوشته شده توسط
hossein-khoshseyar
دوست عزیز من دقیقا همین کاری که شما می گید رو کردم و نتیجه این شد که اونی که متغیرر توی فور تعریف می شه سریعتر در حالی که من انتظار عکس این رو داشتم . گفتم تو اون تاپیکی که گفتم یکی از مدیزای ارشد اومد و توضیح داد که چرا اون کد سریعتر
من اون تاپیک رو خوندم . اما هنوز دارم میگم این دو تا کد برابرند .
SOURCE="vb"]
Option Strict On
Public Class Form1
Declare Function QueryPerformanceCounter Lib "kernel32.dll" (ByRef x As Int64) As Byte
Declare Function QueryPerformanceFrequency Lib "kernel32.dll" (ByRef x As Int64) As Byte
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim c1, c2, frq As Long
QueryPerformanceCounter(c1)
For i As Int64 = 0 To 20000000000
Next
QueryPerformanceCounter(c2)
QueryPerformanceFrequency(frq)
MsgBox((c2 - c1) / frq)
End Sub
End Class[/source]
و همین کد بالا به صورت تعریف متغیر یک خط قبل از حلقه .
شما با اجرای این کدها باید اعداد برابر بگیرین.
اگر باز هم اعداد نابرابر گرفتین زحمت بکشین و این دو تا برنامه رو که اگزه هم هست اجرا کنین و بگین که آیا زمان نابرابر میگیرین ؟(ضمیمه شده)
(ضمنا حواستون باشه چون برنامه موقع شروع به کار هیچی نشون نمیده ممکنه فکر کنین اجرا نشده و چند بار دیگه روش کلیک کنین. بعد از اجرای برنامه هیچی دیده نمیشه و بعد از حدود 30 ثانیه باید مسیج باکس بگیرین)
نقل قول: وی بی .نت یا ..... ؟
دوست عزیز با کمال تعجب باید بگم که فابل شما با یک زمان اجرا شد 59.7
می شه کدتو بزاری
آخه من همه کاری که شما گفتید رو انجام دادم . وقتی هم اونجا توی اون تاپیک یکی از مدیران ارشد توضیح داد . دیگه مطمئن شدم
اه می شه شما کدت رو بزار تا یه بار خودم اجراییش کنم و چک کنم
1 ضمیمه
نقل قول: وی بی .نت یا ..... ؟
نقل قول:
نوشته شده توسط
hossein-khoshseyar
دوست عزیز با کمال تعجب باید بگم که فابل شما با یک زمان اجرا شد 59.7
می شه کدتو بزاری
آخه من همه کاری که شما گفتید رو انجام دادم . وقتی هم اونجا توی اون تاپیک یکی از مدیران ارشد توضیح داد . دیگه مطمئن شدم
اه می شه شما کدت رو بزار تا یه بار خودم اجراییش کنم و چک کنم
ضمیمه کردم. فقط توی فولدر ریلیز که رفتی اگه با اجرا جوابهای نابرابر گرفتی اون فایل PDB رو پاک کن و دوباره بدون اون فایل سرعتها رو چک کن.
نقل قول: وی بی .نت یا ..... ؟
سلام به همگی بازم دعوا سر یه چیزی که از ریشه غلط است
دوستان برای اندازه گیری زمان اجرای یه برنامه که تایمر یا کورنومتر نمیگیرن
مهندسان عزیز مگر طراحی الگوریتم پاس نکردید. حداقل clock Time CPU را اندازه بگیرید. بعدم دوستان عزیز خروجی C# و VB یکی است هر۲تاشون از یکسری کامپوننت استفاده میکنن مگه میشه یه کد تو این با آن یکی فرق کنه اونم یک چنین کد ساده ای.
اصلا از کجا میدونید که در زمان اجرای یکی از کدها cpu شما interupt نداشته؟ ببخشید اما هم کارتون هم بحثتون خیلی مسخره است بهتر نیست بجای اینکارا به کسی که این topic را گذاشته کمک کنید؟
نقل قول: وی بی .نت یا ..... ؟
نقل قول:
نوشته شده توسط
scream666_ss
سلام به همگی بازم دعوا سر یه چیزی که از ریشه غلط است
دوستان برای اندازه گیری زمان اجرای یه برنامه که تایمر یا کورنومتر نمیگیرن
حداقل clock Time CPU را اندازه بگیرید.
اصلا احتیاجی به کرنومتر و و کلاک تایم سی پی یو هم نیست. راه حل اصلیش بررسی کدهای میانیه نه کلاک تایم سی پی یو.
در عین حال حالا که خودتون این راه حل رو پیشنهاد کردین ممکنه بگین کلاک تایم سی پی رو چجوری باید اندازه بگیریم برای این مثالها ؟
نقل قول:
مهندسان عزیز مگر طراحی الگوریتم پاس نکردید.حداقل clock Time CPU را اندازه بگیرید.
در درس طراحی الگوریتم پیچیدگی زمانی و تتا و ... برای الگوریتمحساب میشه که اینجا اصلا بحث سر الگوریتم نیست.(الگوریتمها برابرند) یعنی کلا چیزی که توی طراحی الگوریتم مطرح میشه به موضوع این بحث ربطی نداره.
نقل قول:
بعدم دوستان عزیز خروجی C# و VB یکی است هر۲تاشون از یکسری کامپوننت استفاده میکنن مگه میشه یه کد تو این با آن یکی فرق کنه اونم یک چنین کد ساده ای.
اگه صفحات قبل رو خونده بودید می دیدید که همه از اول (بدون استثنا) واقف بودن که کدهای این دو زبان برابرند و زمانی این مساله مهم شده بود که یه مورد ناهماهنگی پیدا کرده بودن.
نقل قول:
اصلا از کجا میدونید که در زمان اجرای یکی از کدها cpu شما interupt نداشته؟
گیریم که اینتراپت داشته باشه به قول شما، بازم تاثیر چندانی نداره. شما یه برنامه رو داری اجرا می کنی و ده بار هم که اجرا کنی به عددی نزدیک 60 ثانیه می رسی و برنامه دیگه رو همیشه عدد 10 ثانیه میگیری !
نفر اول : از تهران تا فلانجا پیاده چقدر راهه ؟
نفر دوم : حدودا m روز
نفر اول : از کجا معلوم توی سفر ، دستشوییت نگیره ؟
نقل قول:
ببخشید اما هم کارتون هم بحثتون خیلی مسخره است
من تازه وارد فروم شدم اما چیزی که اینجا زیاد می بینم متلک ه ! علتشو هنوز متوجه نشدم. یعنی واقعا نمی دونم چرا کسی مثل شما باید فقط بیاد یه پست بده و بدون اینکه تاپیک رو کامل بخونه و بدون اینک بخاد راهکار مفید بده بیاد بگه شما کارتون مسخرس !
نقل قول: وی بی .نت یا ..... ؟
قبل هر چیز دوست عزیز من منظورم متلک یا این چیزها نبود اگر توهین شده عذر می خواهم. اما به تاپیک و بحث دقت کنید می بینید که مشکل کجاست.
نقل قول:
ممکنه بگین کلاک تایم سی پی رو چجوری باید اندازه بگیریم برای این مثالها ؟
این سوال جالبی بود. من خودم اینکار را در VB.Net نکردم اما در C++ به راحتی امکان پذیر هست. اما سوال خوبی است از همکارهام اینجا می پرسم و جوابتان را می دهم.
نقل قول:
چیزی که توی طراحی الگوریتم مطرح میشه به موضوع این بحث ربطی نداره.
اگه آن درس را یادت باشه اعلام می شه که مهم زمان الگوریتم هست و نه زبان برنامه نویسی.
نقل قول:
زمانی این مساله مهم شده بود که یه مورد ناهماهنگی پیدا کرده بودن.
تا آنجایی که من کد ها را خواندم هر دو کد یکی نبودند. اگه میگید یکی هستند و این اتفاق بیفتد در شرایط یکسان که امکان پذیر نیست، آن وقت می شود بحث کرد
نقل قول:
نفر اول : از تهران تا فلانجا پیاده چقدر راهه ؟
نفر دوم : حدودا m روز
نفر اول : از کجا معلوم توی سفر ، دستشوییت نگیره ؟
اینتراپت CPU می تواند از زمان برنامه شما بیشتر طول بکشد
نقل قول:
بدون اینک بخاد راهکار مفید بده بیاد بگه شما کارتون مسخرس !
اول گفتم چرا میگم مسخره است عذر هم خواستم. اما واقعا راهکار مفید می خواهید؟
جواب این چیزی هست که خودتان گفتید. اگه واقعا می خواهید دو زبان را مقایسه کنید باید به کد های میانه مراجعه کنید. و همچنین برای مقایسه این چنینی از زبان ویژوال استفاده نمیشه حداقل از کنسول استفاده میشود که زمانهای اضافی دیگر حذف شود.
اما دوست عزیز این چیزی هست که اینجا هم بحث می شود اما آخرین جواب خود مایکروسافت این است که در چنین سطحی در صورت یکی بودن شرایط هر دو زبان سرعت یکسانی دارند. تنها در شرایت خاص است که زبان ها متفاوت می شوند. که این را در جایی دیگر که بحث بهتر بودن بود مطرح کردم و جواب دوستان را هم دادم
نقل قول: وی بی .نت یا ..... ؟
سلام دوست عزیز
قول دادم که راه حال درست را ارائه بدهم. خودم نمیدونستم از همکاران پرسیدم و این راه حلیست که همکاران اینجا تو مایکروسافت استفاده میکنن البته من یک نگاه سرسری به کدهای شما انداختم جایی ندیدم که کسی از این راه حل استفاده کرده باشه.
برای این منظر کلاسی در .Net هست به اسم StopWatch در لینک زیر میتونید پیداش کنید یه نگاه بهش بندازید مشکلی بود بگید تا کمک کنم
امیدوارم که مفید بود باشه.
http://msdn.microsoft.com/en-us/libr...stopwatch.aspx
نقل قول: وی بی .نت یا ..... ؟
نقل قول:
نوشته شده توسط
scream666_ss
سلام دوست عزیز
قول دادم که راه حال درست را ارائه بدهم. خودم نمیدونستم از همکاران پرسیدم و این راه حلیست که همکاران اینجا تو مایکروسافت استفاده میکنن البته من یک نگاه سرسری به کدهای شما انداختم جایی ندیدم که کسی از این راه حل استفاده کرده باشه.
برای این منظر کلاسی در .Net هست به اسم StopWatch در لینک زیر میتونید پیداش کنید یه نگاه بهش بندازید مشکلی بود بگید تا کمک کنم
امیدوارم که مفید بود باشه.
http://msdn.microsoft.com/en-us/libr...stopwatch.aspx
این کد معادل همون کدیه که آقای hossein-khoshseyar استفاده کردن . یعنی بررسی زمان از ابتدا تا انتهای اجرا . یعنی ایراداتی که شما به شیوه ی ایشون وارد کردید رو برطرف نکرده (مثلا اینکه اینتراپت یا بار سی پی یو تاثیرگذار باشه یا نه . در واقع این همون به تعبیر خودتون کرنومتره) در هر صورت ممنون /
بابت پست قبلیتون هم فکر می کنم دلیلی برای توضیح بیشتر وجود نداشته باشه. مثلا توضیح بیشتر در مورد بی ربط بودن طراحی الگوریتم به کد حاصل از کامپایل .
///
برگردیم سر بحث اصلی
جناب hossein-khoshseyar
من اون تاپیک که یکی از مدیران ارشد دلیلشو توضیح داده بودن رو خوندم . ظاهرا اونجا بحث تفاوت دو کد در گلوبال / لوکال بودن متغیرها بود . که خوب طبیعیه چنین نتیجه ای رو بشه گرفت .اما کلن برای بررسی این موراد به نظر من بررسی کد میانه راهگشا تر باشه .
برای بررسی کدهای میانه از ildasm استفاده کنید . من اونو در این آدرس دارم :
C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\ildasm.exe
فقط کافیه فایل اگزه رو باهاش باز کنید و به قسمت مورد نظرتون برین(مثلا رویداد موردنظر) و اونو بررسی کنین. ترجیحا وقتی مثلا منظورتون بررسی یه حلقه ی for هست اونو به ساده ترین صورت ممکن بنویسید تا بعد از تبدیل شدن به کد میانی گیج کننده نباشن. مثلا یه حلقه ی ساده با 2 بار تکرار و بدون دستور داخلی .
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i As Int64
For i = 0 To 2
Next
End Sub
End Class
نتیجه اینچنینی را خواهید گرفت :
http://img2.tinypic.info/files/kq0in...dzze_thumb.jpg