PDA

View Full Version : وی بی .نت یا ..... ؟



nilo_nazanin
پنج شنبه 08 مرداد 1388, 16:35 عصر
سلام دوستان عزیز
.
یه سوال دارم ، من رشتم کامپیوتر نیست اما دوست دارم برنامه نویسی رو یاد بگیرم واسه خودم .
به نظر شما میتونم vb.net رو که شروع کردم به یاد گیری ادامه بدم یا نه ؟ یا نیاز داره چیزی اولش یاد بگیرم مثلا vb ? آخه یه دوستی دارم کامپیوتر میخونه بهم پیشنهاد داد کتاب آموزش گام به گام vb.net جعفر نژاد قومی رو بخونم که انصافا هم خوب حالیم میکنه ، اما یکی از دوستان نمیدونم تو کدوم انجمن بود گفت اول باید vb رو یاد بگیری، منو کاملا گیج کردن ، ممنون میشم این شبهه رو واسم روشن کنید .
که بدون پیش زمینه برنامه نویسی تو هیچ زبونی ایا میتونم به آموزش vb.net که 2 ماهه شروع کردم ادامه بدم یا نه ؟
راستی تو vb.net دستوراتی مثل ++i هم هست مثل زبان #c ? ممنون عزیزان

Mani_rf
پنج شنبه 08 مرداد 1388, 21:10 عصر
سلام دوست عزیز ,
شما برای یاد گیری VB.Net نیاز به هیچ پیش زمینه ای ندارید. (البته اگر یه چیزایی را بدونید خو خیلی بهتره). من از VB6 به VB.net مهاجرت کردم تقریبا می شه گفت که تفاوت هاشون خیلی زیاده و اگر از VB6 شروع کنی فقط وقط خودت را تلف کردی.

اما در باره ++I ، هر زبانی ساختار مخصوص خودش را داره که Increment هم از جمله ویژگی های زبان C بوده و هست در عوض برای انجام چنین کاری =+وجود دارد(i +=1).

اما از لحاظ کد نویسی و ایراد یابی VB.Net ساده تر و قوی تره.

nilo_nazanin
پنج شنبه 08 مرداد 1388, 21:30 عصر
مرسی مانی جان

چه خوب شد شما هم وی بی کاری ، میتونی یه لطفی کنی جسنجو دودویی و ترتیبی تو آرایه با وی بی .نت رو کدشو بزاری واسم . خیلی لازمه ممنون مانی جان
قربانت نیلوفر

nilo_nazanin
جمعه 09 مرداد 1388, 19:12 عصر
مانی جان یه زحمتی ببین کجای این ایراد داره راهنماییم کن مرسی



Module Module1
Sub Main()
' SERCH BINARY '
Dim i, s, a(4), low, mid, high As Integer
Console.WriteLine()
For i = 1 To 4
Console.Write(" Enter Number " + i.ToString + ": ")
a(i) = Console.ReadLine()
Next
Console.WriteLine(" ------------------- ")
Console.Write(" Please Number For Serch :")
s = Console.Read()
Console.WriteLine(" ------------------- ")
low = 0
high = i - 1
While (low <= high)
mid = (low + high) / 2
If (s = a(mid)) Then
Console.Write(" peyDa shod " + a(mid).ToString)
ElseIf(s > a(mid)) Then
low = mid + 1
End If

End While

End Sub
End Module

Reza Safa
شنبه 10 مرداد 1388, 10:34 صبح
در زبانهاي دات نت فرقي بين آنها وجود ندارد

و تمام برنامه هايي که مي تواني با c#بنويسي با ويبي دات نت هم مي تواني بنويسي

Microsoft.net
شنبه 10 مرداد 1388, 11:03 صبح
مرسی مانی جان

چه خوب شد شما هم وی بی کاری ، میتونی یه لطفی کنی جسنجو دودویی و ترتیبی تو آرایه با وی بی .نت رو کدشو بزاری واسم . خیلی لازمه ممنون مانی جان
قربانت نیلوفر

خوشم میاد که بعد از یک مقدمه کوتاه سریع رفتی سر اصل مطلب و اونهم انجام پروژه درسی توسط بچه های فرومه !!! D:

Mani_rf
شنبه 10 مرداد 1388, 13:34 عصر
خوشم میاد که بعد از یک مقدمه کوتاه سریع رفتی سر اصل مطلب و اونهم انجام پروژه درسی توسط بچه های فرومه !!! D:
:قهقهه: دمت گرم خیلی باحال گفتی.
اما خوب کاره ما همینه دیگه، به هم کمک کنیم که برنامه نویسی کنیم.

تو VB.Net شما نیازی ندارین که برای جستجوی آرایتون کد بنویسید. جستجوی آرایه در VB.Net به صورت تابعی آماده دراومده که شما آرایه را می دید و اندیس عنصر مورد جستجو را تحویل می گیرید.




Dim Arr(30) As Integer

For I As Byte = 0 To Arr.GetUpperBound(0)
Randomize(Date.Now.Millisecond)
Arr(I) = Rnd() * 100
Next

Array.Sort(Arr)

Dim Result As String = Nothing
For I As Byte = 0 To Arr.GetUpperBound(0)
Result &= Arr(I) & vbNewLine
Next

Dim SearchElement As Integer = Rnd() * 100
MsgBox("Search For : " & SearchElement)

MsgBox(Result)


If Array.BinarySearch(Arr, SearchElement) > 0 Then
MsgBox("Found In :" & Array.BinarySearch(Arr, SearchElement))
Else
MsgBox("Element Not Found")
End If



اینم از مثال. برای جستجوی ترتیبی هم می توانی از توابع Exist و Find استفاده کنی.
در ضمن امکانات دیگری هم مثل مرتب سازیبا سرعت فوق العاده بالا هم جزوی از امکانات کلاس Array هست که می توانید استفاده کنید.

nilo_nazanin
شنبه 10 مرداد 1388, 17:11 عصر
اولا با تشکر از دوستان

ثانیا" آقای با مزه شما اگه پست اول این صفحه رو میخوندید میدید که من قبلا گفتم که من رشتم کامپیوتر نیست پس پروژه ای هم در کار نیست . اول با دقت بخون بعد اظهار نظر کن ضرر نمیکنی .. .
آقا مانی مرسی . اما من میخواستم همون کدی رو که نوشتم رو واسم تصحیح کنین. مرسی .

Mani_rf
یک شنبه 11 مرداد 1388, 20:06 عصر
ببخشید که دیر به دیر جواب می دهم ؛ من تمام وقتم را گذاشتم روی مقاله ای که دارم راجع به تفاوت های VB و #C می نویسم برای همین که به سایت سر می زنم و سعی می کنم مشکلاتی را که جواب دادن بهشون زیاد وقت گیر نیست را به سریع ترین روش پاسخ بدم. شرمنده که وقت خواندن و ایراد یابی کدی که گذاشتی را نداشتم. حتما بعد از ارائه این مقاله همه سوالهایت را جواب خواهم داد.

:لبخند:

nilo_nazanin
دوشنبه 12 مرداد 1388, 19:51 عصر
مانی جان سلام

ما رو دریاب

hossein-khoshseyar
جمعه 16 مرداد 1388, 19:57 عصر
به نظر من اگه شما تازه دارید برنامه نویسی رو شروع می کنید از همون اول برید سراغ c# خصوصا چون رشتتون کامپیوتره و اکثر کاراتون پردازشی
من خودم هم با vb کد می نویسم و هم با C# . چند روزی که متوجه سرعت پایین وی بی نسبت به سی شارپ شدم. وحشتناک
تو انجام پردازش های ساده جمع و تفریق وی بی 5 برابر کند تر از سی شارپ. حالا اگه تو پردازش ها از آرایه هم استفاده بشه این اختلاف به 27 می رسه که فاجعست . یعنی کار ا ثانیه ای سی شارپ رو وی بی تو 27 ثانیه انجام می ده خودم هم اول باور نمی کردم ولی بعد امتحان رو چند تا سیستم و جاهای مختلف باورم شد
وی بی به درد نوشتن برنامه های پردازشی نمی خوره پس بهتره که از همون اول برید دنبال سی شارپ

aghaa_rezaa
شنبه 17 مرداد 1388, 03:54 صبح
دوستان این گفته اقا حسین به نظر شما درسته ؟

hossein-khoshseyar
شنبه 17 مرداد 1388, 11:17 صبح
دوست عزیز چرا خودت چک نمی کنی؟

BehzadBar
شنبه 17 مرداد 1388, 11:36 صبح
سلام امیدوارم کارت با این راه بیوفته




Module Module1
Sub Main()
' SERCH BINARY '

Dim i, s, a(3) As Integer

Console.WriteLine()
For i = 0 To 3
Console.Write(" Enter Number " + (i + 1).ToString + ": ")
a(i) = Console.ReadLine()
Next

Console.WriteLine(" ------------------- ")
Console.Write(" Please Number For Serch :")
s = Console.ReadLine
Console.WriteLine(" ------------------- ")
For b As Integer = 1 To i
If s = a(b - 1) Then

Console.WriteLine(" peyDa shod " + s.ToString)
Exit For

ElseIf b = a.Length Then

Console.WriteLine(" peyDa Nashod " + s.ToString)
End If

Next

End Sub
End Module

aghaa_rezaa
یک شنبه 18 مرداد 1388, 02:03 صبح
دوست عزیز چرا خودت چک نمی کنی؟


سلام دوست عزیز از پاسخت ممنونم

به این علت که رو هیچ کدومش تسلط خیلی خوبی ندارم ، پس نمیتونم قضاوت خیلی منصفانه ای داشته باشم ، اما واسم معقول نیست ، نمیتونم بپزیرم ، این چیزی که شما میگید آمار و ارقام به نظر این حقیر اصلا علمی نیست .
در حقیقت من فک میکنم در .net خیلی فرق نداره شما با c# بنویسی یا با vb.net البته مسلما تفاوتهایی دارند ، اما نه آونقدر که بهش پرداختن و بزرگش کردن ..
شما که بهتر از بنده از .net و دنیای اون اطلاع دارید.
با سپاس


نظر دوستان ما رو کمک کنه .

TAHA-Programer
یک شنبه 18 مرداد 1388, 10:56 صبح
سلام VB.NET زبان خوبیه ادامه بده.

BehzadBar
یک شنبه 18 مرداد 1388, 12:33 عصر
سلام بچه ها اینقدر سر VB یا C# با هم دعوا نکنید برای dot net اصلا فرقی نمیکنه که با چه زبونی مینویسید ولی در کل یه Developer خوب باید چند تا زبون را بلد باشه در باره اندازه گیری دوست عزیزمون هم خیلی مشتاقم بدونم زمان های نانو ثانیه را چطور اندازه گیری کردن آیا با کرنومتر ساعتشون یا با ابزار های موجود در dot net به هر حال برای من هم ثقیل هستش که اینقدر اختلاف زمانی وجود داشته باشه
با تشکر

hossein-khoshseyar
دوشنبه 19 مرداد 1388, 22:41 عصر
سلام بچه ها اینقدر سر VB یا C# با هم دعوا نکنید برای dot net اصلا فرقی نمیکنه که با چه زبونی مینویسید ولی در کل یه Developer خوب باید چند تا زبون را بلد باشه در باره اندازه گیری دوست عزیزمون هم خیلی مشتاقم بدونم زمان های نانو ثانیه را چطور اندازه گیری کردن آیا با کرنومتر ساعتشون یا با ابزار های موجود در dot net به هر حال برای من هم ثقیل هستش که اینقدر اختلاف زمانی وجود داشته باشه
با تشکر

دوست عزیز اگه یه کم برنامه نویسی بلد باشید و بتونید از توابع api یا dll های ویندوز استفاده کنید هیچ وقت چنین حرفی نمی زنید. چون تو کامپیوترهای امروزی خیلی ساده میشه زمان حتی زیر نانو ثانیه رو اندازه گرفت و من تو پروژهام بارها از این امکانات استفاده کردم
هرچند که برای چک کردن قضیه ای که قبلا گفتم خیلی راحت می شه کد پردازشی رو توی یه حلقه انداخت تا اجرای اون چند ثانیه طول بکشه و اصلاٌ قضیه نانو ثانیه پیش نیاد( هرچند که نانو ثانیه رو هم به سادگی می شه اندازه گرفت)

hossein-khoshseyar
دوشنبه 19 مرداد 1388, 22:45 عصر
سلام دوست عزیز از پاسخت ممنونم

به این علت که رو هیچ کدومش تسلط خیلی خوبی ندارم ، پس نمیتونم قضاوت خیلی منصفانه ای داشته باشم ، اما واسم معقول نیست ، نمیتونم بپزیرم ، این چیزی که شما میگید آمار و ارقام به نظر این حقیر اصلا علمی نیست .
در حقیقت من فک میکنم در .net خیلی فرق نداره شما با c# بنویسی یا با vb.net البته مسلما تفاوتهایی دارند ، اما نه آونقدر که بهش پرداختن و بزرگش کردن ..
شما که بهتر از بنده از .net و دنیای اون اطلاع دارید.
با سپاس


نظر دوستان ما رو کمک کنه .

دوست عزیز نیازی به تسلط کامل نیست شما یه حلقه بزار که توش دو تا عدد doubel مثلا یک میلیون بار در هم ضرب بشن و زمان اجرای همین کد ساده رو توی دوتا زبون با هم مقایسه کن ببین که وی بی چقدر کندتر
تازه اگه می خوای به عمق فاجعه پی ببری می تونی اعددادی رو که در هم ضرب می کنی از یه آرایه انتخاب کنی اون وقت که می بینی وی بی در حدود 27 بار کندتره
من توی چند تا پی سی مختلف چک کردم
شما هم امتحان کن ضرر نداره

hossein-khoshseyar
دوشنبه 19 مرداد 1388, 22:49 عصر
سلام دوست عزیز از پاسخت ممنونم

در حقیقت من فک میکنم در .net خیلی فرق نداره شما با c# بنویسی یا با vb.net

نظر دوستان ما رو کمک کنه .

من هم تا چند وقت پیش مثل شما فکر می کردم ولی تازه متوجه شدم که اگه از همه جهات هم مثل هم باشن تو سرعت خیلی با هم اختلاف دارن
می خواید خودم یه کد ساده می دم که شما چک کنید
یا خودتون امتحان کنید. خیلی ساده به واقعیت پی می برید

aghaa_rezaa
سه شنبه 20 مرداد 1388, 15:06 عصر
من هم تا چند وقت پیش مثل شما فکر می کردم ولی تازه متوجه شدم که اگه از همه جهات هم مثل هم باشن تو سرعت خیلی با هم اختلاف دارن
می خواید خودم یه کد ساده می دم که شما چک کنید
یا خودتون امتحان کنید. خیلی ساده به واقعیت پی می برید
سلام دوست من تست کردم :

کد vb.net :

f = 103000
s = 0
j = 75000
For i = 1 To 100000000000
s = s + (f * j)
Next
Console.Write(s)



و اینم کد سی شارپ :


f = 103000;
s = 0;
j = 75000;
{
for (i = 1; i <= 100000000000;i++ )
s = s + (f * j);
}
Console.Write(s);


جالبه بدونید این حلقه صد میلیارد بار اجرا میشه و vb با 4 صدم ثانیه زودتر اجرا میکنه

وی بی : 4:51:1
سی شارپ : 4:51:5

واسم جالب بود.

sari-1369
سه شنبه 20 مرداد 1388, 18:45 عصر
آخرش حرف کدومو قبول کنیم ؟؟ :لبخند:

hossein-khoshseyar
سه شنبه 20 مرداد 1388, 19:41 عصر
اصلا چنین چیزی امکان نداره
من همین الان هم چک کردم
اگه می خوای به عمق فاجعه پی ببری متغیرها رو دابل انتخاب کن و از آرایه استفاده کن
تازه تو همین کدی هم که نوشتی وی بی کندتره
شما زمان رو چه طوری اندازه گرفتی
نکنه با ساعت روی دیوار
پروژت رو بزار تا ببینیم
بعد من هم یه پروژه می زارم که زمان رو خودش حساب می کنه و بعد توش می بینیم که وی بی چقدر کند
منتظرم

hossein-khoshseyar
سه شنبه 20 مرداد 1388, 19:54 عصر
آخرش حرف کدومو قبول کنیم ؟؟ :لبخند:

خوب معلومه حرف من
چون من مدرک دارم

aghaa_rezaa
سه شنبه 20 مرداد 1388, 20:25 عصر
اصلا چنین چیزی امکان نداره
من همین الان هم چک کردم
اگه می خوای به عمق فاجعه پی ببری متغیرها رو دابل انتخاب کن و از آرایه استفاده کن
تازه تو همین کدی هم که نوشتی وی بی کندتره
شما زمان رو چه طوری اندازه گرفتی
نکنه با ساعت روی دیوار
پروژت رو بزار تا ببینیم
بعد من هم یه پروژه می زارم که زمان رو خودش حساب می کنه و بعد توش می بینیم که وی بی چقدر کند
منتظرم
سلام
چرا چنین چیز عجیبی امکان نداره !!!!!! چون شما میگید ؟
شما یه نگاه به متغیر ها و حلقه بنداز فک میکنی int مشخص شدن؟ خوب معلومه دابله دیگه
فرض کن با ساعت شنی .
من شخصا چند ثانیه اینور تر و اونورتر واسم مهم نیست ، بحث وی بی با سی شارپ یه بحث کاملا سوخته است ، قبل از ما کسانی بحث کردن و این بحث ادامه خواهد داشت ..
حالا که شما دوست دارید باشه سی شارپ 70 برابر سریع تره ، خوبه :تشویق:

aghaa_rezaa
سه شنبه 20 مرداد 1388, 20:28 عصر
خوب معلومه حرف من
چون من مدرک دارم


حرف دوستمون چون ایشون سند بانکی دارن :گیج:

کدوم مدرک اخوی ؟

hossein-khoshseyar
سه شنبه 20 مرداد 1388, 21:19 عصر
خوب چرا داغ کردی اگه راست می گی پروژت رو تو دوتا زبون بزار تا من و همه دوستان ببینیم
من هم پروژه خودم رو می زارم تا شما و بقیه دوستان ببینید
مدرک من هم همین چندتا پروژه ساده ای که دارم

الکی تعصب بی خودی نشون نده
من با یه اهل فن هم صحبت کردم و اونم حرف من رو تایید کرد فقط گفت که این زیونا به درد نوشتن برنامه پردازشی نمی خوره و سرعت نسبت به زبون هایی که باهاش برنامه پردازشی می نویسن خیلی کم. این زبون ها اصولا برای یه کار دیگه طراحی شدن
حالا اگه تصمیم دارید یه برنامه پردازشی خفن بنویسید دور وی بی رو خط بکشید.
البته من که چند ساله شغلم برنامه نویسی تو این ماه اولین بار برام پیش اومد که برای نوشتن برنامه چون وی بی جواب نداد برم سراغ سی شارپ. و شاید برای شما حالا حالا چنین اتفاقی نیفته و نیازی بهش نداشته باشید. ولی این یه واقعیت که باید قبول کنید

hossein-khoshseyar
سه شنبه 20 مرداد 1388, 21:20 عصر
حرف دوستمون چون ایشون سند بانکی دارن :گیج:

کدوم مدرک اخوی ؟

پروژه اجرایی و عملی نه حرف زدن روی هوا

sari-1369
چهارشنبه 21 مرداد 1388, 00:02 صبح
هر دوتاتون 2 تا پروژه بزارین ، من امتحان می کنم جوابشو میگم :لبخند:

خوبه ؟

hossein-khoshseyar
چهارشنبه 21 مرداد 1388, 08:35 صبح
هر دوتاتون 2 تا پروژه بزارین ، من امتحان می کنم جوابشو میگم :لبخند:

خوبه ؟

من قبول دارم
اگه دوستمون پروژش رو بزاره منم می زارم

hossein-khoshseyar
چهارشنبه 21 مرداد 1388, 20:30 عصر
من همچنان منتظرم که دوستمون پروژش رو بزاره تا ببینیم

aghaa_rezaa
جمعه 23 مرداد 1388, 19:38 عصر
دوست عزیز منتظر چی هستی ؟

باید یه پروژه با دو زبون بزاریم ، زحمت دوتاش هم میشه شما بکشی، دوست عزیزمون هم تست میکنه
اگه موافقی یا علی
شرمنده من 2 روز خونه نبودم

hossein-khoshseyar
شنبه 24 مرداد 1388, 16:03 عصر
دوست عزیز یعنی چی که زحمت هردوتاش با شما؟
برنامه ای که من دارم که اگه اجرا کنی نتیجه این می شه که سی شارپ سریعتر . شما که می گی قضیه عکس اینه بر نامت رو بزار تا ببینیم.
البته من بگم که بعد از بحث با شما برنامم رو تو چند تا کامپیوتر دیگه هم امتحان کردم نتیجش این شد که سی شارپ تو همه سریعتر بود اما نسبتشون فرق می کرد توی یه کامپیوتر 2 برابر توی یکی 4.2 برابر و ....

BehzadBar
شنبه 24 مرداد 1388, 16:06 عصر
دوست عزیز اگه یه کم برنامه نویسی بلد باشید و بتونید از توابع api یا dll های ویندوز استفاده کنید هیچ وقت چنین حرفی نمی زنید. چون تو کامپیوترهای امروزی خیلی ساده میشه زمان حتی زیر نانو ثانیه رو اندازه گرفت و من تو پروژهام بارها از این امکانات استفاده کردم
هرچند که برای چک کردن قضیه ای که قبلا گفتم خیلی راحت می شه کد پردازشی رو توی یه حلقه انداخت تا اجرای اون چند ثانیه طول بکشه و اصلاٌ قضیه نانو ثانیه پیش نیاد( هرچند که نانو ثانیه رو هم به سادگی می شه اندازه گرفت)

سلام بچه ها من چندروزی نبودم ولی خب یه کارایی کردم آقایی که فکر میکنی فقط خودت بلدی و هیچکی دیگه هیچی بلد نیست لازمه که بدونی برای اندازه گیری زمان احتیاجی به API و یا DLL ها و یا از اینجور اضافه کاریها نیست خیلی راحت با این یه خط کد میتونی زمان را با دقت 18 تا صفر اندازه گیری کنی


Date.now.Ticks

که یک عدد long از لحظه ای که الان هستیم میده
درباره یرعت هم من چیزی نمیگم فقط اگه حالشو داشتین دو تا کد زیر ر ا امتحان کنید
کد VB


Dim f As Double = 103000
Dim s As Double = 0
Dim j As Double = 75000
Dim start As Long = Date.Now.Ticks
For i As Long = 1 To 10000000000
s = s + (f * j)
Next
Dim finish As Long = Date.Now.Ticks
Dim dif As Double = (finish - start) / 10000000


کد C sharp


double f = 103000;
double s = 0;
double j = 75000;
long start = System.DateTime.Now.Ticks;
for (long i = 1; i <= 10000000000L; i++)
{
s = s + (f * j);
}
long finish = System.DateTime.Now.Ticks;
double dif = (finish - start) / 10000000;


همگی موفق باشید

sari-1369
شنبه 24 مرداد 1388, 21:41 عصر
با سلام خدمت همه دوستان .

من هردو کد رو بردم توی برنامه و هر کدوم رو 3 بار اجرا کردم ، که نتیجش این شد .

تا حالا که VB.net برندست .


1- 126 C#
1- 38.9722291 VB.net

2- 84 C#
2- 38.9692289 VB.net

3- 84 C#
3- 38.9782294 VB.net


پروژه هارو هم ضمیمه کردم ، اگه خواستید دانلود کنید .

hossein-khoshseyar
یک شنبه 25 مرداد 1388, 09:01 صبح
آقایی که فکر میکنی فقط خودت بلدی و هیچکی دیگه هیچی بلد نیست

من همچین فکری نمی کنم شما با تمسخر گفته بودید که نمی دونم زمان نانو ثانیه رو چه طوری اندازه گرفتی منم گفتم که می شه

hossein-khoshseyar
یک شنبه 25 مرداد 1388, 09:08 صبح
دوستان لطف کنید این دو تا برنامه ای که گذاشتم رو روی کامپیوترتون اجرا کنید و نتیجش رو بزارید
هر برنامه رو کهاجرا می کنید روی فرم یه دکمه داره
بعد زدن دکمه حدود 10 ثانیه بعد یه عددی رو label نوشته می شه که می خوام بدونم اون عدد روی سیستم شما چبه
مرسی

Mani_rf
یک شنبه 25 مرداد 1388, 13:25 عصر
دوستان لطف کنید این دو تا برنامه ای که گذاشتم رو روی کامپیوترتون اجرا کنید و نتیجش رو بزارید
هر برنامه رو کهاجرا می کنید روی فرم یه دکمه داره
بعد زدن دکمه حدود 10 ثانیه بعد یه عددی رو label نوشته می شه که می خوام بدونم اون عدد روی سیستم شما چبه
مرسی

سلام به همه دوستان گرامی ، من در جواب این دوستمون تو بحث داغ C# یا VB که خودم توش کاملا شرکت داشتم گفته بودم که کدهایی را که باعث شدن شما همچین فکری بکنید را بگذارید تا برسی کنیم. اما خوب کدی از ایشون ندیدیم.

اصلا قصد نداشتم تو این بحث شرکت کنم چون از اولش به نظرم کاملا بی اساس بود و تقریبا محال.
حالا درسته که باهم فرق دارن اما نه اینقدر دیگه..!!!!

اما خوب این حرف دوستمون کا بالا نقل قولش کردم کنجکاوم کرد که آزمایشش کنم.نتیجه جالبی هم داشت . خوب نتیجه را خودتون ببینید:



http://barnamenevis.org/forum/attachment.php?attachmentid=35426&stc=1&d=1106042919

خیلی جالبه VB حدودا 4صدوم ثانیه زودتر از C# اجرا شد.:قهقهه:
سیستمی که من برنامه را روش تست کردم یک سیستم قدیمی بود با این مشخصات:
Ram 512
Cpu AMD Sempron 3000 (1.8GH)
VGA Gforce 5200 (128MB)
Main Matrix

اما کار به اینجاها ختم نشد ، گفتم شاید رو یه سیستم Intel یک جواب دیگه بده که این آزمایش را کردم:
http://barnamenevis.org/forum/attachment.php?attachmentid=35436&stc=1&d=1106044319

:متعجب: 4 ثانیه اختلاف در اجرا....!!!!!!

دومی هم قدیمی بود :
Ram 384
Cpu Intel 1200
VGA Nvidia TNT2 (64MB)
Main Giga

البته عمدا قدیمی تر انتخاب کردم.

خوب این هم یک سیستم جدید :
http://barnamenevis.org/forum/attachment.php?attachmentid=35439&stc=1&d=1106046003

یک چیز جدید هم اینجا کشف کردم C# برای اجرا 24 مگ و VB فقط 11 مگابایت از رم را اشغال کرده.

مشخصات سیستم:

Ram 1GB
Cpu Intel 3000
VGA Nvidia 7300 (512MB)
Main Giga

حالا نمیدونم این دوستمون بر چه اساسی این حرف را زده اما این دیگه Sample خودش بود که این جواب را به ما داد دیگه مگه نه؟؟؟
من از دوستانی که آزمایش می کنن خواهش می کنم که مثل من عکس بگذارن تا بیشتر باورمون بشه کی راست می گه.

sari-1369
یک شنبه 25 مرداد 1388, 15:28 عصر
دوستان لطف کنید این دو تا برنامه ای که گذاشتم رو روی کامپیوترتون اجرا کنید و نتیجش رو بزارید
هر برنامه رو کهاجرا می کنید روی فرم یه دکمه داره
بعد زدن دکمه حدود 10 ثانیه بعد یه عددی رو label نوشته می شه که می خوام بدونم اون عدد روی سیستم شما چبه
مرسی


من برنامه شماره تست کردم ، و نتیجش این شد :

بهتر بود سورس برنامه رو هم میزاشتی ، چون ما که نمیدونیم توی کد نویسی این برنامه ها چه خبره ...



http://www.barnamenevis.org/forum/attachment.php?attachmentid=35443&stc=1&d=1250422039

Mani_rf
یک شنبه 25 مرداد 1388, 16:02 عصر
Sari-1369 چقدر رم اشغال کرده؟؟؟

sari-1369
دوشنبه 26 مرداد 1388, 22:39 عصر
Sari-1369 چقدر رم اشغال کرده؟؟؟


:لبخند:


http://barnamenevis.org/forum/attachment.php?attachmentid=35459&stc=1&d=1250534320

hossein-khoshseyar
سه شنبه 27 مرداد 1388, 09:05 صبح
دوستان , من همین برنامه ای رو که گذاشتم و شما تست کردید توی 4 تا کامپیوتر توی شرکتمون تست کردو و روی 2 تا لب تاپ . توی بهترین حالت وب بی نصف سرعت سی رو داشت . و تو بدترین حالت سی شارب 27 برار سریعتر از وی بی بود. یعنی همش وی بی کند تر بود. ولی حالا شما دارید نتیجه عکس می گید. این چه معنی داره یعنی روی یه کامپیوتر ویبی سریعتره وی یکی دیگه سی؟
خوب حالا یه دوست دیگه هم نتیجه تست رو گذاشت و همگی دیدید که من دروغ نمی گم
سورسشم یه چندتا ضرب سادست . غروب که برم خونه براتونمی زارم

hossein-khoshseyar
سه شنبه 27 مرداد 1388, 09:16 صبح
یه قضیه دیگه چرا اعدادی که می زارید اینقدر با هم اختلاف دارن یکی می گه 25 ثانیه یکی می گه 4 ثانیه
منم که تست کردم همیشه زیر 8 ثانیه بود ؟
خیلی عجیب . من که سر در نمی یارم.

hossein-khoshseyar
سه شنبه 27 مرداد 1388, 09:24 صبح
این نتیجه روی کامپیوتری که الان روش هستم
مشخصات
cpu : intel dual CPU 2.00GHz
Ram : 2Gig

سی شارپ 10 مگ رو و وی بی 13 مگ رم استفاده کرده بود

sari-1369
سه شنبه 27 مرداد 1388, 09:36 صبح
سورسشم یه چندتا ضرب سادست . غروب که برم خونه براتونمی زارم

مهم نیست چیه :لبخند: مهم اینه که هردو یه کارو انجام بدن

Mani_rf
سه شنبه 27 مرداد 1388, 09:44 صبح
آخه ینی پس چی؟؟؟
مگر میشه!!!
حافظه و پردازنده تو هر دوی این زبان ها از طریق .Net Framework کنترل می شه نه زبان برنامه نویسی . اصلا منطقی نیست که اختلاف وجود داشته باشه. حالا که اختلاف وجود داره چرا رو هر سیستمی یک جوره؟؟؟
سیستمایی که من تست کردم که همه VB بالاتر بود اما اینجوری که نشون میده جاهایی هام #C سریع تر عمل می کنه.

آقا میشه کدی که نوشتی را بگذاری ببینم چطوری محاسبه کردی؟؟؟؟ حتی اگر سورس دوتا برنامه را بگذاری هم بد نیست.

hossein-khoshseyar
سه شنبه 27 مرداد 1388, 10:36 صبح
دوستان این کد سی




double[] n1 = new double[11000];
double[] n2 = new double[11000];
double[] y = new double[11000];
long cun1 = 0;
long cun2 = 0;
long freq = 0;
bool d;
//[System.Security.SuppressUnmanagedCodeSecurity]
[DllImport("kernel32")]
private static extern bool QueryPerformanceFrequency(ref long PerformanceFrequency);
//[System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously
[DllImport("kernel32")]


private void button1_Click(object sender, EventArgs e)
{


d= QueryPerformanceCounter(ref cun1);

for (int m = 1; m < 100000; m++)
for (int n = 0; n < 10000; n++)
{
n1[n] = n;
n2[n] = n;
y[n] = n1[n] * n2[n];
}
QueryPerformanceCounter(ref cun2);
QueryPerformanceFrequency(ref freq);
label1.Text = ((float)(cun2 - cun1) / freq).ToString();

}



اینم کد وی بی



Dim n1(11000), m1(11000), j(11000) As Double
Dim c1, c2, frq As Double
Dim n, m As Int32
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 Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click




QueryPerformanceCounter(c1)
For m = 1 To 100000
For n = 0 To 10000

n1(n) = n
m1(n) = n
j(n) = n1(n) * m1(n)
Next
Next



QueryPerformanceCounter(c2)
QueryPerformanceFrequency(frq)
Label1.Text = (c2 - c1) / frq
End Sub

فقط احتمال داره که تو نمونه ای که فایل اجراییش رو براتون گذاشته بودم تعدداد اجرای حلقه for با این یه کم متفاوت باشه

hossein-khoshseyar
سه شنبه 27 مرداد 1388, 10:47 صبح
اصلا یه قضیه دگه
کد من هرچی که باشه حتی اشتباه هم داشته باشه و دو تاکد یکی نباشه , باید روی سیستم های مختلف همش یکی سریعتر از دیگری باشه دیگه.
دلیل اینکه بعضی جاها سی سریعر و بعضی جاها وی بی چیه؟

Mani_rf
سه شنبه 27 مرداد 1388, 11:10 صبح
:متعجب: :متعجب: :متعجب: :متعجب: :متعجب:
:متعجب: :متعجب: :متعجب: :متعجب: :متعجب:

من الان یک چیزی را متوجه شدم که کف کردم!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
فقط رو یکی از سیستم هایی که من برنامه ای را که گذاشتی را اجرا کردم .net Framework نصب بود!!!!!!!!!!!!!!!!!
دوتای بقیه نداشتم اما بازم اجرا شد!!!!!!!!!!!!!!!!!!!!!!!!!!!
آقا چی کار کردی؟؟؟؟؟؟؟؟؟؟
مگه با چه ورژنی گار می کنی؟؟؟

:متعجب: :متعجب: :متعجب: :متعجب: :متعجب:
:متعجب: :متعجب: :متعجب: :متعجب: :متعجب:

hossein-khoshseyar
سه شنبه 27 مرداد 1388, 11:30 صبح
Visual Stdio 2008

hossein-khoshseyar
سه شنبه 27 مرداد 1388, 15:35 عصر
چی شد. کسی نظری نداره؟:ناراحت::ناراحت::نارا ت:

sari-1369
سه شنبه 27 مرداد 1388, 15:44 عصر
.net عجیب می شود .... :لبخند:

ACorvinus
سه شنبه 27 مرداد 1388, 16:11 عصر
سلام .

به شخصه دوست ندارم وارد اینجور مسائل شم چون ریشه نداره و همه ادعاهایی که می کنین پایه نداره ولی اجازه بدین یه چیزی رو عرض کنم .

بچه هایی که دارین رو سرعت بین VB و #C بحث می کنین باید به این نکته توجه کنین که خود Microsoft میتونه در این مورد بحث کنه چون کد Windows رو داره و اگه قرار باشه برنامه ای رو تست کنه قطعا 10000 بار بهتر از شما میتونه شرایط Ram و CPU رو در یه حالت نگه داره .

اصلا آیا شما در مورد Paging رم چیزی میدونین ؟ آیا میدونین همه برنامه ها ابتدا به MSIL ( Microsoft Intermedia Language ) تبدیل شده و بعدا اجرا میشن ؟!!!

در آخر حرفام باید خدمت تک تک شما عزیزانم عرض کنم که من زمان اجرا رو در حالت exe عرض می کنم نه در حالت Debuging .
و اگه همین برنامه هایی که در دو محیط اجرا می کنین رو دو یا سه بار دیگه اجرا کنین به هیچ نتیجه ای نمیرسین چون زمانها همیشه در حالت تغییر هستن !!!

hossein-khoshseyar
سه شنبه 27 مرداد 1388, 16:24 عصر
Mani_rf جوابی نداره
بلاخره شما چی فکر می کنید؟ ما اینجا کامپیوتری نداریم که .net framwork نداشته باشه . من امروز توی شرکت 5 کامپیوتر بود که با هم خریده بودن و مشخصات سخت افزاریش دقیقا عین هم بود و فقط تفاوت نرم افزاری داشتن. ویندوز همه xp sp2 بود و روی همه برنامه های سنگین Matlab , visual stdio 2008, ise نصب بود . فق هر کاربر به سلیقه خودش یه سری برنامه های کاربردی کوچیک برای خودش نصب کرده بود . خیلی جالب که توی همه این سیستمها
1) وی بی کند تر ( به جز یه دونه که اونم توی رقم سوم اعشار از سی جلو می زد)
2) این سیتم ها با این که سخت افزاری عین هم و نرم افزار های مشابه داشتن سرعت اجرای برنامه توشون خیلی متفاوت بود
آخه اصلا معقول نیت که یه سیستمی که 4 تا برنامه مثل firefox , yahoo masenger , نسبت به دیگری تغییر داشته باشه سرعتش اینقدر متفاون باشه

و جالب تر از همه اینکه توی هر 5 تا سیستم وقتی از benchmark خود matlab استفاده می کردیم سرغت ها با دقت خوبی مثل هم بود
حالا چرا دات نت این طوریه ؟؟؟؟؟؟
یکی جواب بده ؟؟؟؟
:گیج::گیج::گیج:

hossein-khoshseyar
سه شنبه 27 مرداد 1388, 16:29 عصر
سلام .

به شخصه دوست ندارم وارد اینجور مسائل شم چون ریشه نداره و همه ادعاهایی که می کنین پایه نداره
در آخر حرفام باید خدمت تک تک شما عزیزانم عرض کنم که من زمان اجرا رو در حالت exe عرض می کنم نه در حالت Debuging .
و اگه همین برنامه هایی که در دو محیط اجرا می کنین رو دو یا سه بار دیگه اجرا کنین به هیچ نتیجه ای نمیرسین چون زمانها همیشه در حالت تغییر هستن !!!

یعنی چی پایه ای نداره
درست جواب بدید
شما به سئوالات من پاسخ بدید
وقتی ما دوتا برنامه اجرایی داریم . چرا تو بعضی از سیستمها یکی و تو بعضی دیگری سریعتر اجرا می شه ؟
این قضیه اصلا ربطی به اون چیزی که شما گفتید نداره
در ضمن ما از فایل اجرایی استفاه می کنیم . و همیشه بعد از چند بار اجرای برنامه به عدد نهایی می رسیم. چون بعد از چند با راجرا برنامه cash شده و دیگه توی زمان اجرای اون تغییرات زیادی به وجود نمی یاد
لطف کنید یه جواب منطقی و درست برای این قضیه پیدا کنید

aghaa_rezaa
سه شنبه 27 مرداد 1388, 19:13 عصر
آقا من از همه دوستان هم ممنونم و هم عذر خواهی میکنم بابت تاخیرم

پس نتیجه میگیریم سرعت بین این دوتا اختلاف آنچنانی نیست که بخوایم سرش بحث کنیم
من خودم هم از اول گفتم وی بی یه نمه اگه سریعتر نباشه کندتر هم نیست .
که اغلب دوستان همین نتیجه رو بدست آوردن ... الا ایالحال همگی خسته نباشید .

hossein-khoshseyar
سه شنبه 27 مرداد 1388, 19:56 عصر
آقا من از همه دوستان هم ممنونم و هم عذر خواهی میکنم بابت تاخیرم

پس نتیجه میگیریم سرعت بین این دوتا اختلاف آنچنانی نیست که بخوایم سرش بحث کنیم
من خودم هم از اول گفتم وی بی یه نمه اگه سریعتر نباشه کندتر هم نیست .
که اغلب دوستان همین نتیجه رو بدست آوردن ... الا ایالحال همگی خسته نباشید .

دوست عزیز واسه چی برای خودت نتیجه گیری کردی
خوب حداقل چند نفری بودن که نظر عکس شما رو توی آزمایش بدست آوردن.
به نظر من مشکل از یه جایی هست که ما خبر نداریم . شاید یه خبره پیدا شد و جواب ما رو داد.
آخه مگه می شه که هر کی توی کامپیوتر خودش چک کنه و یه جواب متفاوت با بقیه بگیره؟؟؟؟

aghaa_rezaa
چهارشنبه 28 مرداد 1388, 09:07 صبح
عزیز مرغ 1 پا داره دیگه ....!
sari چک کرد دیدی که
مانی هم رو دو تا سیستم چک کرد رو دوتاش وی بی سریعتر بود
منم که چک کردم ، شما هم چک کردی
!

emadfa
چهارشنبه 28 مرداد 1388, 09:38 صبح
دوستان سلام
به عنوان یک برنامه نویس #C اعتقاد دارم که دو عامل در این اختلاف سرعت ها موثر است:
1) این مساله ممکن است خنده دار به نظر برسد اما احتمال دارد که دوستان در هنگام کامپایل برنامه در قسمت configuration manager گزینه debug را انتخاب کرده باشند نه release. دقت کنید که در برنامه نویسی معیار همواره نسخه نهایی است که باید release باشد چون نسخه debug اصطلاحا دارای symbolic information می باشد. البته می دانم که برنامه نویسان این مسایل را دقت می کنند!! اما احتمال دارد یکی از دلایل اختلاف این باشد.
2) در صورت صرف نظر کردن از مورد اول باز هم اختلاف سرعت تا حدی منطقی است. درست است که در .Net همه زبان ها به زبان میانی مایکروسافت تبدیل می شوند اما فراموش نکنید .Net یک ساختار بسیار complex دارد به گونه ای که خود مایکروسافت عقیده دارد که در برخی موارد ممکن یک سری ساختارها فقط در یک زبان قابلیت انتقال به MSIL را داشته باشد!! البته این مبحث جز یکی از مباحثی است که متقاضیان مدرک MCPD مایکروسافت باید در مورد آن اطلاعاتی داشته باشند!!! و دانستن آن چندان ضروری به نظر نمی رشد!

با آرزوی موفقیت

ACorvinus
چهارشنبه 28 مرداد 1388, 14:44 عصر
دوست عزیز واسه چی برای خودت نتیجه گیری کردی
خوب حداقل چند نفری بودن که نظر عکس شما رو توی آزمایش بدست آوردن.
به نظر من مشکل از یه جایی هست که ما خبر نداریم . شاید یه خبره پیدا شد و جواب ما رو داد.
آخه مگه می شه که هر کی توی کامپیوتر خودش چک کنه و یه جواب متفاوت با بقیه بگیره؟؟؟؟


عزیزم بازار رو داغ نکن .
اولین و آخرین سخن اینه که شما که هیچ، حتی آقای علیرضا مداح ( مدیر سایت ) هم نمیتونن وضعیت CPU و RAM رو در دو زمان مختلف یکی کنن .

حتی اگه یه برنامه کوچیک سیستمی که نه شما میدونین چیه نه من، توی سیستم اجرا بشه زمانهایی که شما بدست اوردین رو زیر سوال میبره که میبینیم که داره میبره .

لطفا در مورد Paging رم مطالعه کنید .

ACorvinus
چهارشنبه 28 مرداد 1388, 14:46 عصر
دوستان سلام
به عنوان یک برنامه نویس #C اعتقاد دارم که دو عامل در این اختلاف سرعت ها موثر است:
1) این مساله ممکن است خنده دار به نظر برسد اما احتمال دارد که دوستان در هنگام کامپایل برنامه در قسمت configuration manager گزینه debug را انتخاب کرده باشند نه release. دقت کنید که در برنامه نویسی معیار همواره نسخه نهایی است که باید release باشد چون نسخه debug اصطلاحا دارای symbolic information می باشد. البته می دانم که برنامه نویسان این مسایل را دقت می کنند!! اما احتمال دارد یکی از دلایل اختلاف این باشد.
2) در صورت صرف نظر کردن از مورد اول باز هم اختلاف سرعت تا حدی منطقی است. درست است که در .Net همه زبان ها به زبان میانی مایکروسافت تبدیل می شوند اما فراموش نکنید .Net یک ساختار بسیار complex دارد به گونه ای که خود مایکروسافت عقیده دارد که در برخی موارد ممکن یک سری ساختارها فقط در یک زبان قابلیت انتقال به MSIL را داشته باشد!! البته این مبحث جز یکی از مباحثی است که متقاضیان مدرک MCPD مایکروسافت باید در مورد آن اطلاعاتی داشته باشند!!! و دانستن آن چندان ضروری به نظر نمی رشد!

با آرزوی موفقیت

سلام دوست عزیز، گویا این افراد برنامه رو از حالت exe اجرا می کنن نه کامپایل .

چون اگه در حالت کامپایل اجرا کنن دنیا به هم میریزه و اختلافات زمانی بیشتر از حد تصور میره بالا .

Hossis
چهارشنبه 28 مرداد 1388, 15:15 عصر
به نظر اختلاف وی بی و سی شارپ فقط در سرعت اجرا نیست ،‌ سرعت اجرا تنظیماتی دارد که در بخش کامپایل اعمال می‌شود.
من یه جهتی که از سی شارپ بدم می‌آید این است که دستور زبان سی شارپ بر عکس است اما زبان وی بی مثل زبان آدمی زاد کار می کند. نمونه اش رو در تعریف یک متغیر متوجه می‌شوید.
در وی بی ،‌ کلماتی مانند
end if
end sub
باعث خوانا شدن برنامه می‌شود اما در سی شارپ اون کروشه ها ی مسخره آدم رو گیج می‌کنه
البته باید بگم خیلی هم تو سی شارپ وارد نیستم و شاید اشتباه می کنم

aghaa_rezaa
چهارشنبه 28 مرداد 1388, 17:50 عصر
....
.....
......
زبان وی بی مثل زبان آدمی زاد کار می کند. نمونه اش رو در تعریف یک متغیر متوجه می‌شوید.
در وی بی ،‌ کلماتی مانند
end if
end sub
باعث خوانا شدن برنامه می‌شود اما در سی شارپ اون کروشه ها ی مسخره آدم رو گیج می‌کنه
البته باید بگم خیلی هم تو سی شارپ وارد نیستم و شاید اشتباه می کنم


کاملا موافقم.

hossein-khoshseyar
چهارشنبه 28 مرداد 1388, 19:44 عصر
کاملا موافقم.

مثل اینکه کلا موضوع بحث عوض شده
بحث سر این نیست که کدوم یکی بهتره . بحث سر سرعتش
شما خودت دو تا فایل exe رو که من گذاشتم اجرا کردی تا ببینی نتیجه چی می شه؟
خوب حال اجز من sari هم تو کامپیوترش تست کرد نتیجه ای که من گرفتم رو گرفت.
من یه سئوال پرسیدم اگه بلدی جواب بده اگه نه مجبور نیستی تو بحث شرکت کنی

hossein-khoshseyar
چهارشنبه 28 مرداد 1388, 19:48 عصر
عزیزم بازار رو داغ نکن .
اولین و آخرین سخن اینه که شما که هیچ، حتی آقای علیرضا مداح ( مدیر سایت ) هم نمیتونن وضعیت CPU و RAM رو در دو زمان مختلف یکی کنن .

حتی اگه یه برنامه کوچیک سیستمی که نه شما میدونین چیه نه من، توی سیستم اجرا بشه زمانهایی که شما بدست اوردین رو زیر سوال میبره که میبینیم که داره میبره .

لطفا در مورد Paging رم مطالعه کنید .

باشه فرض کن که نمی شه دو تا سیستم برابر داشت . باشه فرض کن که ما چند تا سیستم داریم که سرغتشون با هم متفاوت.
چرا وقتی دو تا برنامه رو تو این دو تا سیستم اجرا می کنیم تو یه کامپوتر برنامه شماره 1 سریعتر اجرا می شه و تو کامپیوتر دیگه برنامه شماره 2 ؟ چرا ؟

hossein-khoshseyar
چهارشنبه 28 مرداد 1388, 19:51 عصر
من همچنان منتظر Mani_rf هستم . که جواب بده چون منطقی جواب می ده و رو هوا حرف نمی زنه .

Mani_rf
چهارشنبه 28 مرداد 1388, 19:54 عصر
من یکی از این حلقه ها که دوستمون گفته بود را تو دو زبان نوشتم و بر روی یک دستگاه دیگر اجرا کردم. (البته مجبور شدم .Net Framework را هم نصب کنم.مثل برنامه دوستمون بدون اون اجرا نشد!!!!) خوب نتیجه را خودتون ببینید :


http://barnamenevis.org/forum/attachment.php?attachmentid=35545&stc=1&d=1250697252

من هنوز تو کفم.
هیچ دلیلی منطقی نمی توانم پیدا کنم ، دارم خول مشم.

میگم یکی از دوستان که زبانش خوبه از Microsoft بپرسه خوب. Support@Microsoft.com

sari-1369
چهارشنبه 28 مرداد 1388, 20:51 عصر
مثل اینکه کلا موضوع بحث عوض شده
بحث سر این نیست که کدوم یکی بهتره . بحث سر سرعتش
شما خودت دو تا فایل exe رو که من گذاشتم اجرا کردی تا ببینی نتیجه چی می شه؟
خوب حال اجز من sari هم تو کامپیوترش تست کرد نتیجه ای که من گرفتم رو گرفت.
من یه سئوال پرسیدم اگه بلدی جواب بده اگه نه مجبور نیستی تو بحث شرکت کنی

سر سرعت این دو زبان هم بحث کردن در حد ما نیست و از ما بر نمیاد .

من همونطور که برنامه شمارو تست کردم و نتیجه به نفع C# شد ، برنامه یکی دیگه از دوستان رو اجرا کردم و نتیجه اون برد VB.net بود .

پس بیخیال شیم :لبخند:

این بیلی جون می خواست بین بچه های برنامه نویس دعوا بندازه ، گرفت این C# مادر مرده رو انداخت به جونمون . مثل بختک افتاده رو زندگیمون .

من الان به خاطر همکاری تو یه پروژه مجبورم C# :عصبانی++: یاد بگیرم . آخه اونایی که داریم با هم کار میکنیم نمیتونن به ویبی سوییچ کنن .

ســـــــــــبز باشید

hossein-khoshseyar
چهارشنبه 28 مرداد 1388, 23:28 عصر
باشه بی خیال ولی اخه چندتا سئوال اساسی برامون به وجود اومده اونا رو چه کنیم.؟؟؟
من که پروژهام رو انجام دادم و با سی جواب گرفتم . چون همون طوری که قبلا گفته بودم با وی بی خیلی کند شد. تا پروژه بعدی هم خدا بزرگ بلاخره با یه چیزی برنامم رو می نویسم
البته از این به بعد بیشتر سعی می کنم با سی شارپ بنویسم
راستی آقای mani_rf این مفاله شما کی آماده می شه؟ بزار اون بخوونیم شاید نظرمون عوض شد.

ACorvinus
پنج شنبه 29 مرداد 1388, 09:49 صبح
باشه فرض کن که نمی شه دو تا سیستم برابر داشت . باشه فرض کن که ما چند تا سیستم داریم که سرغتشون با هم متفاوت.
چرا وقتی دو تا برنامه رو تو این دو تا سیستم اجرا می کنیم تو یه کامپوتر برنامه شماره 1 سریعتر اجرا می شه و تو کامپیوتر دیگه برنامه شماره 2 ؟ چرا ؟


عزیزم، مثل اینکه اصلا متوجه نیستی ها .
مثل تو مثل این میمونه که یه بار با یه ماشینی که باکش پر از بنزین هست میری به مسافرت و به مقصد میرسی و یه بار دیگه که نصف باک پره میری و وسط راه میمونی .

نتیجه: یه بار زود میرسی یه بار دیر .

حالا میخوام اینو بگم که توی این مثال خودت میتونی بنزین رو پر کنی و هیچ وقت وسط راه نمونی ولی در کامپیوتر اینجوری نیست مگر اینکه خودت سیستم عامل رو بنویسی .

حالا تو بحث کن ولی بهت قول میدم هیشکی بجز Microsoft Programmers نمیتونه به این سوالت جواب بده .

hossein-khoshseyar
پنج شنبه 29 مرداد 1388, 10:11 صبح
یعنی کسی نمی تونه روی سرعت این دو بحث کنه ؟؟؟؟

BehzadBar
پنج شنبه 29 مرداد 1388, 10:26 صبح
بچه ها میخواین من به MicroSoft یه نامه بنویسم و از اونا بپرسیم ؟
فقط اگه همه موافقن تو آماده کردن متن نامه باید کمک کنید

Mani_rf
پنج شنبه 29 مرداد 1388, 12:44 عصر
بچه ها میخواین من به MicroSoft یه نامه بنویسم و از اونا بپرسیم ؟
فقط اگه همه موافقن تو آماده کردن متن نامه باید کمک کنید

سلام.

میگم فکر کنم من هم اون بالا همین را گفتم!!!! حتی آدرس ایمل مایکروسافت را هم دادم دیگه نه!!!




راستی آقای mani_rf این مفاله شما کی آماده می شه؟ بزار اون بخوونیم شاید نظرمون عوض شد

دوستان بخدا همه وقتم پره اما بازام دارم تو وقتای خالیم تحقیق می کنم؛ جالب ترش اینکه هرچی بیشتر می گردم بیشتر پیدا می کنم همین دیشب دو مورد جدید پیدا کردم ؛ دلم نمی خواد مطالبی که تو مقاله می نویسم اشتباه باشه یا اینکه جوری باشه که کسی فکر کنه برای کم کردن شاءن #C این مقاله را نوشتم. برای هیمن زیاد طول کشیده.

BehzadBar
پنج شنبه 29 مرداد 1388, 13:16 عصر
Support@MicroSoft.com ایمیل عمومی مایکروسافته که شاید یه جواب کلی بدن یا به یه مقاله های عمومی ارجاع بدن ولی مایکروسافت خودش موظف کرده که به مشکلات و سوال های MCP ها یا MCTS ها و همه اونائیکه مدارک مایکروسافت رو دارن جواب دقیق بده و حتی پیگیری هم میکنن که یه ایمیلی به غیر از ساپورته فقط باید یه متن جامع و موقر از مشکلمون که ادبیات خوبی داشته باشه بنویسیم حالا اگه دوستان تو متن فارسی یاری بکنن من میتونم به انگلیسی ترجمه بکنم و امیدوارم حرف آخرو درباره این مشکل از زبون مایکرو سافت هم بشنویم
منتظر متن یا کمکی از دوستان هستم تا سریع نامرو براشون ارسال کنیم

hossein-khoshseyar
پنج شنبه 29 مرداد 1388, 14:18 عصر
منم کاملا موافقم و تا جایی که بتونم کمک می کنم

hossein-khoshseyar
پنج شنبه 29 مرداد 1388, 14:22 عصر
دوستان لطف کنید یه سری به این تاپیک بزنید .شاید شما بتونید جواب بدید

یه جورایی به همین قضیه ربط داره

http://barnamenevis.org/forum/showthread.php?p=785124&posted=1#post785124

اصلا توی کدی که من با ویبی و سی نوشته بودم . توی هر کدوم به یه شکل متغیر رو تعریف کرده بودم . تازه متوجه شدم که این مسئله خیلی مهم
بخونید متوجه می شید چی میگم.

Mani_rf
پنج شنبه 29 مرداد 1388, 14:56 عصر
Support@MicroSoft.com ایمیل عمومی مایکروسافته که شاید یه جواب کلی بدن یا به یه مقاله های عمومی ارجاع بدن ولی مایکروسافت خودش موظف کرده که به مشکلات و سوال های MCP ها یا MCTS ها و همه اونائیکه مدارک مایکروسافت رو دارن جواب دقیق بده و حتی پیگیری هم میکنن که یه ایمیلی به غیر از ساپورته فقط باید یه متن جامع و موقر از مشکلمون که ادبیات خوبی داشته باشه بنویسیم حالا اگه دوستان تو متن فارسی یاری بکنن من میتونم به انگلیسی ترجمه بکنم و امیدوارم حرف آخرو درباره این مشکل از زبون مایکرو سافت هم بشنویم
منتظر متن یا کمکی از دوستان هستم تا سریع نامرو براشون ارسال کنیم


با تشکر دوست عزیز . من با یک بار با همین آدرس یک سوال برنامه نویسی پرسیدم که به بخش مربوطه فرستاده شد و پاسخ داده شد. اما اگر جای بهتری سراغ دارید خوب چه بهتر...

متن با من اما کمی فرست لازم دارم.

aghaa_rezaa
جمعه 30 مرداد 1388, 01:21 صبح
مثل اینکه کلا موضوع بحث عوض شده
بحث سر این نیست که کدوم یکی بهتره . بحث سر سرعتش
شما خودت دو تا فایل exe رو که من گذاشتم اجرا کردی تا ببینی نتیجه چی می شه؟
خوب حال اجز من sari هم تو کامپیوترش تست کرد نتیجه ای که من گرفتم رو گرفت.
من یه سئوال پرسیدم اگه بلدی جواب بده اگه نه مجبور نیستی تو بحث شرکت کنی


اولا من نظر خودم رو در مورد پست دوستمون دادم ، نه پست شما !
بله گذاشتم اینم عکسش :


بعد هم یه نمه ادب داشته باشین بد نیست ، حد خودتونو نگه دارید !

BehzadBar
شنبه 31 مرداد 1388, 14:17 عصر
با تشکر دوست عزیز . من با یک بار با همین آدرس یک سوال برنامه نویسی پرسیدم که به بخش مربوطه فرستاده شد و پاسخ داده شد. اما اگر جای بهتری سراغ دارید خوب چه بهتر...

متن با من اما کمی فرست لازم دارم.
خوب مانی جان پس متن نامه را اینجا بذار تا براشون ایمیل کنم و منتظر جواب نهایی این مسئله باشیم

mike
سه شنبه 03 شهریور 1388, 14:47 عصر
سلام
راستش یه نکته ای در مورد سورس برنامه ها به نظرم اومد که شاید مهم نباشه اونم اینه که در هنگام کار با اعداد صحیح VB به طور پیشفرض در حالت checked هست یعنی با هر بار انتساب یا تغییر مقدار متغیر چک می کنه که Overflow رخ نده ولی C# به طور پیشفرض اینکار رو نمی کنه،بد نیست یه بار کدهای C# رو در حالت checked اجرا و نتیجه رو بررسی کنید.

hossein-khoshseyar
سه شنبه 03 شهریور 1388, 16:17 عصر
سلام
راستش یه نکته ای در مورد سورس برنامه ها به نظرم اومد که شاید مهم نباشه اونم اینه که در هنگام کار با اعداد صحیح VB به طور پیشفرض در حالت checked هست یعنی با هر بار انتساب یا تغییر مقدار متغیر چک می کنه که Overflow رخ نده ولی C# به طور پیشفرض اینکار رو نمی کنه،بد نیست یه بار کدهای C# رو در حالت checked اجرا و نتیجه رو بررسی کنید.

دوست عزیز از کجا می شه این خاصیتی که گفتی رو فعال یا غیر فعال کرد ؟
ممنون از نکته ای که گفتی

mike
سه شنبه 03 شهریور 1388, 22:43 عصر
سلام

checked
{...}
کدی را که می خواهید بررسی شود بین بلاک مربوط به checked قرار دهید،کدهای خارج از این بلاک بررسی نمی شوند.در عین حال کلمه کلیدی unchecked هم موجود است.

saeedr22
سه شنبه 03 شهریور 1388, 23:15 عصر
بهترین کتاب ویبی دات نت به نظر من کتاب دیتل & دیتل هستش.
جعفرنژاد قمی به نظر من به درد کار نمی خوره.

pirmard
چهارشنبه 04 شهریور 1388, 11:22 صبح
دوستان این کد سی




double[] n1 = new double[11000];
double[] n2 = new double[11000];
double[] y = new double[11000];
long cun1 = 0;
long cun2 = 0;
long freq = 0;
bool d;
//[System.Security.SuppressUnmanagedCodeSecurity]
[DllImport("kernel32")]
private static extern bool QueryPerformanceFrequency(ref long PerformanceFrequency);
//[System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously
[DllImport("kernel32")]


private void button1_Click(object sender, EventArgs e)
{


d= QueryPerformanceCounter(ref cun1);

for (int m = 1; m < 100000; m++)
for (int n = 0; n < 10000; n++)
{
n1[n] = n;
n2[n] = n;
y[n] = n1[n] * n2[n];
}
QueryPerformanceCounter(ref cun2);
QueryPerformanceFrequency(ref freq);
label1.Text = ((float)(cun2 - cun1) / freq).ToString();

}
اینم کد وی بی



Dim n1(11000), m1(11000), j(11000) As Double
Dim c1, c2, frq As Double
Dim n, m As Int32
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 Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click




QueryPerformanceCounter(c1)
For m = 1 To 100000
For n = 0 To 10000

n1(n) = n
m1(n) = n
j(n) = n1(n) * m1(n)
Next
Next



QueryPerformanceCounter(c2)
QueryPerformanceFrequency(frq)
Label1.Text = (c2 - c1) / frq
End Sub
فقط احتمال داره که تو نمونه ای که فایل اجراییش رو براتون گذاشته بودم تعدداد اجرای حلقه for با این یه کم متفاوت باشه



تاپیک این همه رفته جلو ولی هنوز کسی نگفته این دو تا کد معادل هم نیستن ؟

For m = 1 To 100000
For n = 0 To 10000



for (int m = 1; m < 100000; m++)
for (int n = 0; n < 10000; n++)

تعداد تکرار حلقه ها به طرز فجیعی با هم اختلاف دارن ! اگه سرعت ایندو برابر بود بیشتر جای تعجب داشت .:لبخند:

Mani_rf
چهارشنبه 04 شهریور 1388, 11:39 صبح
تاپیک این همه رفته جلو ولی هنوز کسی نگفته این دو تا کد معادل هم نیستن ؟

For m = 1 To 100000
For n = 0 To 10000



for (int m = 1; m < 100000; m++)
for (int n = 0; n < 10000; n++)

تعداد تکرار حلقه ها به طرز فجیعی با هم اختلاف دارن ! اگه سرعت ایندو برابر بود بیشتر جای تعجب داشت .:لبخند:


حالا من بقیه را نمی دونم اما من که از این دو کد استفاده کردم.





Button1.Enabled = False

Dim V1 As Double = 996585545.21556
Dim V2 As Double = 2522314498.8892241
Dim V3 As Double = 0

Dim I As Double = 0, J As Double = 0

Dim Time As Long = DateTime.Now.TimeOfDay.TotalMilliseconds

For J = 0 To 9999999999
V3 = V1 * V2
Next

Label1.Text = DateTime.Now.TimeOfDay.TotalMilliseconds - Time

Button1.Enabled = True






Button1.Enabled = false;

double V1 = 996585545.21556;
double V2 = 2522314498.8892241;
double V3 =0;

double I = 0; double J = 0;

double Time = DateTime.Now.TimeOfDay.TotalMilliseconds;

for (J = 0; J < 9999999999; J++)
{
V3 = V1 * V2;
}

Label1.Text =Convert.ToString ( DateTime.Now.TimeOfDay.TotalMilliseconds - Time);

Button1.Enabled = true;

pirmard
چهارشنبه 04 شهریور 1388, 12:50 عصر
حالا من بقیه را نمی دونم اما من که از این دو کد استفاده کردم.





Button1.Enabled = False

Dim V1 As Double = 996585545.21556
Dim V2 As Double = 2522314498.8892241
Dim V3 As Double = 0

Dim I As Double = 0, J As Double = 0

Dim Time As Long = DateTime.Now.TimeOfDay.TotalMilliseconds

For J = 0 To 9999999999
V3 = V1 * V2
Next

Label1.Text = DateTime.Now.TimeOfDay.TotalMilliseconds - Time

Button1.Enabled = True


Button1.Enabled = false;

double V1 = 996585545.21556;
double V2 = 2522314498.8892241;
double V3 =0;

double I = 0; double J = 0;

double Time = DateTime.Now.TimeOfDay.TotalMilliseconds;

for (J = 0; J < 9999999999; J++)
{
V3 = V1 * V2;
}

Label1.Text =Convert.ToString ( DateTime.Now.TimeOfDay.TotalMilliseconds - Time);

Button1.Enabled = true;




متاسفانه شما هم کدتون در دو زبان معادل همدیگه نیست .اما خوشبختانه چون شما از حلقه های تودرتو استفاده نکردین این اشتباهتون چندان تاثیرگذار در زمان برنامه نباید باشه.
بعد از اینکه کدتون رو اصلاح کردین بگین به چه اختلاف زمانی رسیدین ؟ آیا اختلاف همچنان زیاد ه ؟

/
یه سوال : دلیل اینکه اعداد رو اینطوری انتخاب کردین (مثلا 2522314498.8892241) و از اعداد رند استفاده نکردین چی بوده ؟ (چون احساس می کنم به عمد این کارو کردین مشتاقم مزیتشو بدونم)

hossein-khoshseyar
چهارشنبه 04 شهریور 1388, 13:04 عصر
تاپیک این همه رفته جلو ولی هنوز کسی نگفته این دو تا کد معادل هم نیستن ؟

For m = 1 To 100000
For n = 0 To 10000



for (int m = 1; m < 100000; m++)
for (int n = 0; n < 10000; n++)

تعداد تکرار حلقه ها به طرز فجیعی با هم اختلاف دارن ! اگه سرعت ایندو برابر بود بیشتر جای تعجب داشت .:لبخند:

دوست عزیز من که خودم تو چند تا پست قبل به همین مسئله اشاره کردم و شما رو به یک تاپیک جدید فرستادم
تو اون تاپیک هم سئوالم همین بود که چرا ابن دو تا دستوری که الان شما اشاره کردید از لحاظ سعت خیلی با هم فرق داردن و کدوم سریعترن
من که چند سال برنامه می نویسم تا حالا اصلا به این قضیه برخورد نکرده بود :متفکر::متفکر::متفکر:

hossein-khoshseyar
چهارشنبه 04 شهریور 1388, 13:07 عصر
تاپیک این همه رفته جلو ولی هنوز کسی نگفته این دو تا کد معادل هم نیستن ؟

For m = 1 To 100000
For n = 0 To 10000



for (int m = 1; m < 100000; m++)
for (int n = 0; n < 10000; n++)

تعداد تکرار حلقه ها به طرز فجیعی با هم اختلاف دارن ! اگه سرعت ایندو برابر بود بیشتر جای تعجب داشت .:لبخند:

تازه دوست عزیز شما اول جواب منو بدید به نظر شما توی همین دوتا فوری که نوشتیم کدوک سریعتر؟
اون که متغیر توی فور تعریف می شه یا اونی که اول تعریف می شه ؟

pirmard
چهارشنبه 04 شهریور 1388, 13:13 عصر
دوست عزیز من که خودم تو چند تا پست قبل به همین مسئله اشاره کردم و شما رو به یک تاپیک جدید فرستادم
تو اون تاپیک هم سئوالم همین بود که چرا ابن دو تا دستوری که الان شما اشاره کردید از لحاظ سعت خیلی با هم فرق داردن و کدوم سریعترن
من که چند سال برنامه می نویسم تا حالا اصلا به این قضیه برخورد نکرده بود :متفکر::متفکر::متفکر:

وقتی تعداد تکرار دستورات یه برنامه حدودا 10000 تا بیشتر از یه برنامه دیگه باشه باید هم کندتر اجرا بشه :|

فکر می کنم باید از شما بپرسم که معادل این کد در سی شارپ چی میشه :
for i = 0 to 1

pirmard
چهارشنبه 04 شهریور 1388, 13:16 عصر
تازه دوست عزیز شما اول جواب منو بدید به نظر شما توی همین دوتا فوری که نوشتیم کدوک سریعتر؟
اون که متغیر توی فور تعریف می شه یا اونی که اول تعریف می شه ؟

یعنی در واقع منظورتون تفاوت بین این دو کده و محل تعریف متغیر (که در بلاک for باشه یا نباشه) رو می خاین بررسی کنین؟ ?

for (int m = 1; m < 100000; m++)
و
Int m;
for (m = 1; m < 100000; m++)

hossein-khoshseyar
چهارشنبه 04 شهریور 1388, 13:20 عصر
یعنی در واقع منظورتون تفاوت بین این دو کده و محل تعریف متغیر (که در بلاک for باشه یا نباشه) رو می خاین بررسی کنین؟ ?

for (int m = 1; m < 100000; m++)
و
Int m;
for (m = 1; m < 100000; m++)

می خوام بدونم کدوم یک از 2 کد زیر سریعتره و چرا

dim m as int16
for m=1 to 100
.
.
next


یا

for m as int16=1 to100
.
.
next

Mani_rf
چهارشنبه 04 شهریور 1388, 13:31 عصر
متاسفانه شما هم کدتون در دو زبان معادل همدیگه نیست .اما خوشبختانه چون شما از حلقه های تودرتو استفاده نکردین این اشتباهتون چندان تاثیرگذار در زمان برنامه نباید باشه.
بعد از اینکه کدتون رو اصلاح کردین بگین به چه اختلاف زمانی رسیدین ؟ آیا اختلاف همچنان زیاد ه ؟

/
یه سوال : دلیل اینکه اعداد رو اینطوری انتخاب کردین (مثلا 2522314498.8892241) و از اعداد رند استفاده نکردین چی بوده ؟ (چون احساس می کنم به عمد این کارو کردین مشتاقم مزیتشو بدونم)


دوست عزیز، راستش را بخواهی من متوجه نشدم تفاوت دو کدم در کجاست! اگر امکان دارد توضیح دهید تا آن را برطرف سازم.

درباره عدد غیر رند هم احصاص کردم برای محاسبه اعداد غیر صحیح با اعشار بالا سیستم به محاسبه و حافظه بیشتری نیاز دارد تا ععداد رند.

pirmard
چهارشنبه 04 شهریور 1388, 13:58 عصر
دوست عزیز، راستش را بخواهی من متوجه نشدم تفاوت دو کدم در کجاست! اگر امکان دارد توضیح دهید تا آن را برطرف سازم.

درباره عدد غیر رند هم احصاص کردم برای محاسبه اعداد غیر صحیح با اعشار بالا سیستم به محاسبه و حافظه بیشتری نیاز دارد تا ععداد رند.

حلقه های for شما در وی بی یه بار بیشتر از معادلی که برای اون نوشتین در سی شارپ اجرا میشن
برای همین از دوستمون خواستم که معادل این کد رو در سی شارپ بنویسه :
for i = 0 to 1
آیا معادلش میشه ؟
for (i=0,i<1,i++)


که این اشتباه در مثال شما زیاد بغرنج نبود چون حلقه ی تودرتو نداشتین . اما در مثال اون دوست دیگمون اختلاف زیادی رو باعث می شد ؟
متوجه منظورم شدید ؟
/

pirmard
چهارشنبه 04 شهریور 1388, 14:05 عصر
می خوام بدونم کدوم یک از 2 کد زیر سریعتره و چرا

dim m as int16
for m=1 to 100
.
.
next


یا

for m as int16=1 to100
.
.
next


هیچ فرقی با هم ندارن .

hossein-khoshseyar
چهارشنبه 04 شهریور 1388, 14:18 عصر
هیچ فرقی با هم ندارن .

دوست عزیز اگه فرقی با هم نیم کنن پس چرا می گی که من اشتباه کردم
من همین کد رو توی یه فور دیگه نوشته بودم که با این حرف شما نباید مشکلی داشته باشه

Mani_rf
چهارشنبه 04 شهریور 1388, 14:24 عصر
حلقه های for شما در وی بی یه بار بیشتر از معادلی که برای اون نوشتین در سی شارپ اجرا میشن
برای همین از دوستمون خواستم که معادل این کد رو در سی شارپ بنویسه :
for i = 0 to 1
آیا معادلش میشه ؟
for (i=0,i<1,i++)


که این اشتباه در مثال شما زیاد بغرنج نبود چون حلقه ی تودرتو نداشتین . اما در مثال اون دوست دیگمون اختلاف زیادی رو باعث می شد ؟
متوجه منظورم شدید ؟
/


درسته ، کاملا حق با شماست ، اصلا به این موضوع توجه نکرده بودم.

نکته خیلی جالب تر این که تو برنامه ای که دوستمون گذاشت تو سیستم هایی که من امتحان کردم باز هم VB سریعتر کد را اجرا کرد!! این یعنی کلی اختلاف تو C#‎ . البته کد خودم را تو چند تا سیستم ازجمله سیستم خونه خودم هم تست کردم که اون هم جوابش جالب شد.



http://barnamenevis.org/forum/attachment.php?attachmentid=35932&stc=1&d=1251282130



Cpu : 2.8 1mb cash
Ram : 1 DDR Bus 400
VGA : Nvidia 6200(256 MB)
Main : Asus P4
Win : Vista Sp1

hossein-khoshseyar
چهارشنبه 04 شهریور 1388, 14:26 عصر
هیچ فرقی با هم ندارن .

تازه متوجه شدم که شما داری به چی اشاره می کنی
منظورتون اون یک باری که کد بیشتر از اون اجرا می شه
البته اون یک بار با این که اتوی فور هم هست نباید ایقدر اختلاف ایجاد کنه مشکل اصلی مال اوون جایی بود که متغیر حله و تعریف کردیم
برخلاف نظ شما این دو تا حلقه فور با هم اختلاف دارن و اونی که متغیرر حلقه توی خود حلقه تعریف می شه خیلی سریعتر . حتی اگه اون حلقه باز توی یه حلقه دیگه باشه

یعنی


int m, n as int16
for m=1 to 100
for n=1 to 100
..

next
next

کنتدتر از کد زیر اجرا می شه

for m as int16=1 to 100
for n as int16=1 to 100
..
..
next
next

من در این باره یه تاپیک ایجاد کردم که آدرش توی هین تاپیک هست
یکی از مدیران ارشد سایت هم جواب داد و دلیلش رو توضیح داد

hossein-khoshseyar
چهارشنبه 04 شهریور 1388, 15:01 عصر
درسته ، کاملا حق با شماست ، اصلا به این موضوع توجه نکرده بودم.

نکته خیلی جالب تر این که تو برنامه ای که دوستمون گذاشت تو سیستم هایی که من امتحان کردم باز هم VB سریعتر کد را اجرا کرد!! این یعنی کلی اختلاف تو C#‎‎ . البته کد خودم را تو چند تا سیستم ازجمله سیستم خونه خودم هم تست کردم که اون هم جوابش جالب شد.



http://barnamenevis.org/forum/attachment.php?attachmentid=35932&stc=1&d=1251282130



Cpu : 2.8 1mb cash
Ram : 1 DDR Bus 400
VGA : Nvidia 6200(256 MB)
Main : Asus P4
Win : Vista Sp1



دوست عزیز به نظر شما چرا نتیجه توی بعضی از کامپیوتر ها متفاوت با چیزی که شما تست کردید هست؟ دلیل منطقی دارید
خوب اگه یه سیستم کندتر یا سریعتر باشه هر دو تا برنامه باید توی اون سیستم کند تر یا سریعتر اجرا بشن دیگه. مکه این طور نیست؟

pirmard
چهارشنبه 04 شهریور 1388, 16:56 عصر
تازه متوجه شدم که شما داری به چی اشاره می کنی
منظورتون اون یک باری که کد بیشتر از اون اجرا می شه
البته اون یک بار با این که اتوی فور هم هست نباید ایقدر اختلاف ایجاد کنه مشکل اصلی مال اوون جایی بود که متغیر حله و تعریف کردیم

خوب البته یه بار نبود . بلکه به ازای هر یه بار اضافه در حلقه ی بیرونی حلقه داخلی 1000 بار بیشتر اجرا می شد . البته از جهت اینکه قرار بود کد رو برای مایکروسافت ایمیل کنن یه کم قضیه حیثیتی بود .


برخلاف نظ شما این دو تا حلقه فور با هم اختلاف دارن و اونی که متغیرر حلقه توی خود حلقه تعریف می شه خیلی سریعتر . حتی اگه اون حلقه باز توی یه حلقه دیگه باشه

یعنی


int m, n as int16
for m=1 to 100
for n=1 to 100
..

next
next

کنتدتر از کد زیر اجرا می شه

for m as int16=1 to 100
for n as int16=1 to 100
..
..
next
next

من در این باره یه تاپیک ایجاد کردم که آدرش توی هین تاپیک هست
یکی از مدیران ارشد سایت هم جواب داد و دلیلش رو توضیح داد

شما از من در مورد یک حلقه سوال کردید . اما این که الان میگید فرق داره دو تا حلقه ی تو در توه .
پیشنهاد من به شما اینه که یه زحمتی بکشید برنامه رو با تعداد تکرار بالا و با یه حلقه بنویسید . یه بار به صورتی که شمارنده در دستور for تعریف بشه و یه بار هم قبلش از حلقه تعریف کنید
برنامه ها رو ریلیز کنید . فایل PDB رو از فولدر پاک کنید و حالا دو تا برنامه رو (exe ها رو ) اجرا کنید .و نتیجه رو بگین . انتظار من زمان برابره.

hossein-khoshseyar
چهارشنبه 04 شهریور 1388, 21:44 عصر
پیشنهاد من به شما اینه که یه زحمتی بکشید برنامه رو با تعداد تکرار بالا و با یه حلقه بنویسید . یه بار به صورتی که شمارنده در دستور for تعریف بشه و یه بار هم قبلش از حلقه تعریف کنید
برنامه ها رو ریلیز کنید . فایل PDB رو از فولدر پاک کنید و حالا دو تا برنامه رو (exe ها رو ) اجرا کنید .و نتیجه رو بگین . انتظار من زمان برابره.

دوست عزیز من دقیقا همین کاری که شما می گید رو کردم و نتیجه این شد که اونی که متغیرر توی فور تعریف می شه سریعتر در حالی که من انتظار عکس این رو داشتم . گفتم تو اون تاپیکی که گفتم یکی از مدیزای ارشد اومد و توضیح داد که چرا اون کد سریعتر
درحالی که من انتظار داشتم چون توی فور داخلی متغیر حلقهش به ازای هر بار اجرای حلقه بیرونی یه بار تکرار می شه کندترع

pirmard
چهارشنبه 04 شهریور 1388, 23:00 عصر
دوست عزیز من دقیقا همین کاری که شما می گید رو کردم و نتیجه این شد که اونی که متغیرر توی فور تعریف می شه سریعتر در حالی که من انتظار عکس این رو داشتم . گفتم تو اون تاپیکی که گفتم یکی از مدیزای ارشد اومد و توضیح داد که چرا اون کد سریعتر


من اون تاپیک رو خوندم . اما هنوز دارم میگم این دو تا کد برابرند .
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 ثانیه باید مسیج باکس بگیرین)

hossein-khoshseyar
پنج شنبه 05 شهریور 1388, 09:05 صبح
دوست عزیز با کمال تعجب باید بگم که فابل شما با یک زمان اجرا شد 59.7
می شه کدتو بزاری
آخه من همه کاری که شما گفتید رو انجام دادم . وقتی هم اونجا توی اون تاپیک یکی از مدیران ارشد توضیح داد . دیگه مطمئن شدم
اه می شه شما کدت رو بزار تا یه بار خودم اجراییش کنم و چک کنم

pirmard
پنج شنبه 05 شهریور 1388, 09:34 صبح
دوست عزیز با کمال تعجب باید بگم که فابل شما با یک زمان اجرا شد 59.7
می شه کدتو بزاری
آخه من همه کاری که شما گفتید رو انجام دادم . وقتی هم اونجا توی اون تاپیک یکی از مدیران ارشد توضیح داد . دیگه مطمئن شدم
اه می شه شما کدت رو بزار تا یه بار خودم اجراییش کنم و چک کنم

ضمیمه کردم. فقط توی فولدر ریلیز که رفتی اگه با اجرا جوابهای نابرابر گرفتی اون فایل PDB رو پاک کن و دوباره بدون اون فایل سرعتها رو چک کن.

scream666_ss
پنج شنبه 05 شهریور 1388, 12:42 عصر
سلام به همگی‌ بازم دعوا سر یه چیزی که از ریشه غلط است
دوستان برای اندازه گیری زمان اجرای یه برنامه که تایمر یا کورنومتر نمیگیرن
مهندسان عزیز مگر طراحی الگوریتم پاس نکردید. حداقل clock Time CPU را اندازه بگیرید. بعدم دوستان عزیز خروجی C# و VB یکی‌ است هر۲تاشون از یکسری کامپوننت استفاده می‌کنن مگه می‌شه یه کد تو این با آن‌ یکی‌ فرق کنه اونم یک چنین کد ساده ای.

اصلا از کجا میدونید که در زمان اجرای یکی‌ از کدها cpu شما interupt نداشته؟ ببخشید اما هم کارتون هم بحثتون خیلی‌ مسخره است بهتر نیست بجای اینکارا به کسی‌ که این topic را گذاشته کمک کنید؟

pirmard
پنج شنبه 05 شهریور 1388, 14:34 عصر
سلام به همگی‌ بازم دعوا سر یه چیزی که از ریشه غلط است
دوستان برای اندازه گیری زمان اجرای یه برنامه که تایمر یا کورنومتر نمیگیرن
حداقل clock Time CPU را اندازه بگیرید.

اصلا احتیاجی به کرنومتر و و کلاک تایم سی پی یو هم نیست. راه حل اصلیش بررسی کدهای میانیه نه کلاک تایم سی پی یو.
در عین حال حالا که خودتون این راه حل رو پیشنهاد کردین ممکنه بگین کلاک تایم سی پی رو چجوری باید اندازه بگیریم برای این مثالها ؟



مهندسان عزیز مگر طراحی الگوریتم پاس نکردید.حداقل clock Time CPU را اندازه بگیرید.در درس طراحی الگوریتم پیچیدگی زمانی و تتا و ... برای الگوریتمحساب میشه که اینجا اصلا بحث سر الگوریتم نیست.(الگوریتمها برابرند) یعنی کلا چیزی که توی طراحی الگوریتم مطرح میشه به موضوع این بحث ربطی نداره.


بعدم دوستان عزیز خروجی C#‎‎ و VB یکی‌ است هر۲تاشون از یکسری کامپوننت استفاده می‌کنن مگه می‌شه یه کد تو این با آن‌ یکی‌ فرق کنه اونم یک چنین کد ساده ای.اگه صفحات قبل رو خونده بودید می دیدید که همه از اول (بدون استثنا) واقف بودن که کدهای این دو زبان برابرند و زمانی این مساله مهم شده بود که یه مورد ناهماهنگی پیدا کرده بودن.



اصلا از کجا میدونید که در زمان اجرای یکی‌ از کدها cpu شما interupt نداشته؟
گیریم که اینتراپت داشته باشه به قول شما، بازم تاثیر چندانی نداره. شما یه برنامه رو داری اجرا می کنی و ده بار هم که اجرا کنی به عددی نزدیک 60 ثانیه می رسی و برنامه دیگه رو همیشه عدد 10 ثانیه میگیری !
نفر اول : از تهران تا فلانجا پیاده چقدر راهه ؟
نفر دوم : حدودا m روز
نفر اول : از کجا معلوم توی سفر ، دستشوییت نگیره ؟




ببخشید اما هم کارتون هم بحثتون خیلی‌ مسخره است
من تازه وارد فروم شدم اما چیزی که اینجا زیاد می بینم متلک ه ! علتشو هنوز متوجه نشدم. یعنی واقعا نمی دونم چرا کسی مثل شما باید فقط بیاد یه پست بده و بدون اینکه تاپیک رو کامل بخونه و بدون اینک بخاد راهکار مفید بده بیاد بگه شما کارتون مسخرس !

scream666_ss
پنج شنبه 05 شهریور 1388, 16:43 عصر
قبل هر چیز دوست عزیز من منظورم متلک یا این چیزها نبود اگر توهین شده عذر می خواهم. اما به تاپیک و بحث دقت کنید می بینید که مشکل کجاست.

ممکنه بگین کلاک تایم سی پی رو چجوری باید اندازه بگیریم برای این مثالها ؟
این سوال جالبی بود. من خودم اینکار را در VB.Net نکردم اما در C++ به راحتی امکان پذیر هست. اما سوال خوبی است از همکارهام اینجا می پرسم و جوابتان را می دهم.


چیزی که توی طراحی الگوریتم مطرح میشه به موضوع این بحث ربطی نداره.
اگه آن درس را یادت باشه اعلام می شه که مهم زمان الگوریتم هست و نه زبان برنامه نویسی.


زمانی این مساله مهم شده بود که یه مورد ناهماهنگی پیدا کرده بودن.

تا آنجایی که من کد ها را خواندم هر دو کد یکی نبودند. اگه میگید یکی هستند و این اتفاق بیفتد در شرایط یکسان که امکان پذیر نیست، آن وقت می شود بحث کرد


نفر اول : از تهران تا فلانجا پیاده چقدر راهه ؟
نفر دوم : حدودا m روز
نفر اول : از کجا معلوم توی سفر ، دستشوییت نگیره ؟
اینتراپت CPU می تواند از زمان برنامه شما بیشتر طول بکشد


بدون اینک بخاد راهکار مفید بده بیاد بگه شما کارتون مسخرس !
اول گفتم چرا میگم مسخره است عذر هم خواستم. اما واقعا راهکار مفید می خواهید؟
جواب این چیزی هست که خودتان گفتید. اگه واقعا می خواهید دو زبان را مقایسه کنید باید به کد های میانه مراجعه کنید. و همچنین برای مقایسه این چنینی از زبان ویژوال استفاده نمیشه حداقل از کنسول استفاده میشود که زمانهای اضافی دیگر حذف شود.
اما دوست عزیز این چیزی هست که اینجا هم بحث می شود اما آخرین جواب خود مایکروسافت این است که در چنین سطحی در صورت یکی بودن شرایط هر دو زبان سرعت یکسانی دارند. تنها در شرایت خاص است که زبان ها متفاوت می شوند. که این را در جایی دیگر که بحث بهتر بودن بود مطرح کردم و جواب دوستان را هم دادم

scream666_ss
جمعه 06 شهریور 1388, 10:06 صبح
سلام دوست عزیز
قول دادم که راه حال درست را ارائه بدهم. خودم نمیدونستم از همکاران پرسیدم و این راه حلیست که همکاران اینجا تو مایکروسافت استفاده می‌کنن البته من یک نگاه سرسری به کد‌های شما انداختم جایی‌ ندیدم که کسی‌ از این راه حل استفاده کرده باشه.
برای این منظر کلاسی در .Net هست به اسم StopWatch در لینک زیر میتونید پیداش کنید یه نگاه بهش بندازید مشکلی‌ بود بگید تا کمک کنم
امیدوارم که مفید بود باشه.
http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx

pirmard
دوشنبه 09 شهریور 1388, 23:21 عصر
سلام دوست عزیز
قول دادم که راه حال درست را ارائه بدهم. خودم نمیدونستم از همکاران پرسیدم و این راه حلیست که همکاران اینجا تو مایکروسافت استفاده می‌کنن البته من یک نگاه سرسری به کد‌های شما انداختم جایی‌ ندیدم که کسی‌ از این راه حل استفاده کرده باشه.
برای این منظر کلاسی در ‎‎.Net هست به اسم StopWatch در لینک زیر میتونید پیداش کنید یه نگاه بهش بندازید مشکلی‌ بود بگید تا کمک کنم
امیدوارم که مفید بود باشه.
http://msdn.microsoft.com/en-us/library/system.diagnostics.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/kq0in8ntnbaw23qzdzze_thumb.jpg (http://img2.tinypic.info/viewer.php?file=kq0in8ntnbaw23qzdzze.jpg)