PDA

View Full Version : گفتگو: سرعت عملکرد جاوا در مقابل #C



archDevil
چهارشنبه 02 آذر 1390, 02:03 صبح
با سلام خدمت تمامی دوستان

من و دوستم(آی دی:milad reisi) یه مقایسه ساده از سرعت محاسبات در سی شارپ و جاوا انجام دادیم و به نتیجه جالبی دست پیدا کردیم.کاری که ما کردیم این بود که دو تا ماتریس 3000*3000 رو در سی شارپ و در جاوا در هم ضرب کردیم.اختلاف باور نکردنی و جالب بود.

زمان اجرا در سی شارپ : 7 دقیقه و 16 ثانیه

و اما جاوا،حدس بزنید...
.
.
.
3 دقیقه و 18 ثانیه!!!!!! سرعت بیش از دو برابره!!!!!!

کد برنامه هارو هم میذاریم ،اگه شک دارید میتونید امتحان کنید،برنامه ها تحت کنسول نوشته شدن

کد برنامه سی شارپ(کامپایلر VS2010):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int[,] a;
a=new int[3000,3000];
int[,] b;
b = new int[3000, 3000];
int[,] c = new int[3000, 3000];

for (int i = 0; i < 3000; i++)
{
for (int j = 0; j < 3000; j++)
{
a[i, j] = 50;
b[i, j] = 50;
}
}
DateTime t = new DateTime();
t = DateTime.Now;

for (int i = 0; i < 3000; i++)
{
Console.WriteLine(i);

for (int j = 0; j < 3000; j++)
{
for (int k = 0; k < 3000; k++)
{
c[i, j] = a[i, k] * b[j,k];

}
}
}
DateTime t2 = new DateTime();
t2 = DateTime.Now;

Console.WriteLine("end of calculation");

Console.WriteLine(t2.Hour - t.Hour);
Console.WriteLine(t2.Minute - t.Minute);
Console.WriteLine(t2.Second - t.Second);
Console.WriteLine(t2.Millisecond - t.Millisecond);

Console.WriteLine("press enter");

Console.ReadLine();
}
}
}


کد جاوا(کامپایلر netBeans 7.0.1):

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package javaapplication5;

import java.sql.Time;
import java.util.Date;

/**
*
* @author Mohsen
*/
public class JavaApplication5 {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int [][]a=new int[3000][3000];
int [][]b=new int[3000][3000];
int [][]c=new int[3000][3000];

for (int i = 0; i < 3000; i++)
{
for (int j = 0; j < 3000; j++)
{
a[i][j] = 50;
b[i][j] = 50;
}
}
Date d=new Date();
long s1=d.getSeconds();
long m1=System.currentTimeMillis();
long mi1=d.getMinutes();
for (int i = 0; i < 3000; i++)
{
System.out.println(i);

for (int j = 0; j < 3000; j++)
{
for (int k = 0; k < 3000; k++)
{
c[i][j] = a[i][k] * b[j][k];

}
}
}
Date d2=new Date();
long s2=d2.getSeconds();
long m2=System.currentTimeMillis();
long mi2=d2.getMinutes();
System.out.println("end of calculation");
System.out.println(mi1);
System.out.println(mi2);
System.out.println(s1);
System.out.println(s2);
System.out.println(m1);
System.out.println(m2);


System.out.println(mi2-mi1);
System.out.println(s2- s1);
System.out.println(m2 - m1);

System.out.println("press enter");



}
}

mmd2009
چهارشنبه 02 آذر 1390, 03:19 صبح
با سلام

پیشنهاد میکنم اینجارو (http://www.itu.dk/%7Esestoft/papers/numericperformance.pdf)بخونید. در کل اعتقادی به مقایسه بین 3 زبان که الان پراستفاده ترین زبان های دنیا هستند یعنی c و c# و java ندارم ولی اونجا یک مقایسه کرده.

موفق باشید

milad reisi
چهارشنبه 02 آذر 1390, 13:03 عصر
ما قصد مقایسه کلی بین این دو زبان نداشتیم و نداریم.
هدف ما از ایجاد این تاپیک این بود که قدرت این دو زبان رو در قسمت های مختلف مثل قدرت محاسباتی،کار در شبکه،پردازش های گرافیکی و ... مقایسه کنیم و اگه کسی خاست کاری توی یه ضمینه خاصی انجام بده این مطالب واسش راهنمای خوبی باشه و زبان قویتری توی اون ضمینه رو انتخاب کنه

danial82
چهارشنبه 02 آذر 1390, 14:36 عصر
جالب بود
نتیجه اینکه برای کارهای محاسباتی جاوا سریعتره؟

ArashRoshan
چهارشنبه 02 آذر 1390, 15:42 عصر
اگه می شه این تست رو با #F هم انجام بدید !

archDevil
چهارشنبه 02 آذر 1390, 16:14 عصر
با سلام خدمت شما دوستان عزیز

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

milad reisi
چهارشنبه 02 آذر 1390, 16:24 عصر
نکته ای بسیار جالب توجه

به جای int از double استفاده کردیم
همون برنامه بالا رو با اعداد اعشاری امتحان کردیم،اینجا هم جاوا سریع تر بود،زمان اجراها به شرح زیر است
زمان اجرا در جاوا: 3 دقیقه و 9 ثانیه
زمان اجرا در سی شارپ: 7 دقیقه و 7 ثانیه

ما میخاستیم سرعت اجرا توی جاوا و سی شارپ رو مقایسه کنیم ولی به یه مسئله جدید برخوردیم،همونطور که میدونید سرعت ضرب اعداد int خیلی بیشتر از اعداد double هست،ولی اگه دقت کرده باشین اینجا double سریعتر شد!!!!! همه برنامه ها توی یه سیستم و با یه شرایط یکسان اجرا شدن

mg_mahyar
چهارشنبه 02 آذر 1390, 18:26 عصر
جالبه چون همیشه میگن جاوا کنده واسه همینم اپل روی IOS نمیزاره برنامه های جاوا اجرا بشه.
یه جای کار ایراد داره. مثلا برنامه جاوا 64 بیتی اجرا شده ولی سیشارپ 32 بیتی.(منظورم کامپایل اوناست)
ضمنا برنامه رو بعد از کامپایل تست کردید یا همزمان؟

milad reisi
چهارشنبه 02 آذر 1390, 20:00 عصر
هردو کامپایلر 32 بیت بودن،برنامه ها هم در زمان کامپایل و هم خروجی آنها امتحان شده-همچنین برنامه روی سیستم های مختلف امتحان شده،زمان اجراها متفاوت شده ولی اختلاف حفظ شده

archDevil
پنج شنبه 03 آذر 1390, 10:20 صبح
با سلام خدمت شما دوستان عزیز
امتحان بالا را باز برای جمع تکرار کردیم و نتیجه مشابه نتایج بالا بدست اومد. اما با این تفاوت که زمان جمع در جاوا کمتر شد اما در سی شارپ بیشتر شد.
جاوا:2:19 و سی شارپ 8:12

archDevil
پنج شنبه 03 آذر 1390, 10:50 صبح
با سلام خدمت شما دوستان

کسی دیگه غیر از archDevil امتحان نکرده؟؟؟؟
دوست عزیز این کار رو من تنها انجام نمی دهم بلکه با همکاری دوست گرامی من (آی دی : milad reisi) در حال انجام دادن این تست هستیم و در تاپیک سوم نیز خدمت تمام دوستان عارض شدیم که قصد ما از این کار این است که هر کدام از بچه ها که هر تست و آموزش مشابه ی را در رابطه با جاوا و سی شارپ دارند در این تاپیک قرار دهند که یه تاپیک آموزشی باشد.

با تشکر از دوستان عزیز

سوداگر
پنج شنبه 03 آذر 1390, 11:40 صبح
با سلام خدمت شما دوستان

دوست عزیز این کار رو من تنها انجام نمی دهم بلکه با همکاری دوست گرامی من (آی دی : milad reisi) در حال انجام دادن این تست هستیم و در تاپیک سوم نیز خدمت تمام دوستان عارض شدیم که قصد ما از این کار این است که هر کدام از بچه ها که هر تست و آموزش مشابه ی را در رابطه با جاوا و سی شارپ دارند در این تاپیک قرار دهند که یه تاپیک آموزشی باشد.
با تشکر از دوستان عزیز

میدونم که با هم همکاری میکنید، منتها چون گفتید "روی یک سیستم" و vs2010 شده کامپایلر!!!! و یا به netbeans گفتید "کامپایلر جاوا"!!! منم گفتم باید بقیه دوستان هم این تست رو انجام بدهند. خودم هم نتیجه ی برنامه شما را روی سیستم خودم اجرا می کنم و نتیجه را به زودی در همین پست/تاپیک قرار می دهم.

به نظر من "زمان" معیار مناسبی برای مقایسه سرعت، نیست! بلکه مقدار کوانتوم دریافتی از CPU هم باید لحاظ شود چون در محیط ویندوز هستیم نه DOS (ای یکی رو نمیدونم چه جوری لحاظ کنم!).
با تشکر.

milad reisi
پنج شنبه 03 آذر 1390, 12:22 عصر
میدونم که با هم همکاری میکنید، منتها چون گفتید "روی یک سیستم" و vs2010 شده کامپایلر!!!! و یا به netbeans گفتید "کامپایلر جاوا"!!!

ما منظورمون این بوده که از کامپایلر IDE VS2010 و کامپایلر IDE netBeans استفاده شده و توقع نداشتیم که منظور مارو متوجه نشین،چون کاملا واضحه و اصلا بحث سر این نیس!!!!
من فکر میکنم که شما تاپیکارو درس نخوندین،چون من اینو گفتم

ما میخاستیم سرعت اجرا توی جاوا و سی شارپ رو مقایسه کنیم ولی به یه مسئله جدید برخوردیم،همونطور که میدونید سرعت ضرب اعداد int خیلی بیشتر از اعداد double هست،ولی اگه دقت کرده باشین اینجا double سریعتر شد!!!!! همه برنامه ها توی یه سیستم و با یه شرایط یکسان اجرا شدن منظور از یه سیستم در اینجا اینه که شرایط مقایسه و اجرا یکسان بوده وگرنه ما روی سیستم های مختلف هم امتحان کرده ایم،اینم مدرک
همچنین برنامه روی سیستم های مختلف امتحان شده،زمان اجراها متفاوت شده ولی اختلاف حفظ شده

به نظر من "زمان" معیار مناسبی برای مقایسه سرعت، نیست!
پس میشه بگین معیار مناسب چیه وقتی که شرایط یکسانه؟!!!


کمی تامل بد نیست:افسرده:

سوداگر
پنج شنبه 03 آذر 1390, 12:28 عصر
کمی تامل بد نیست
موافقم

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

milad reisi
پنج شنبه 03 آذر 1390, 12:45 عصر
اونم دیدم -کوانتومی که دارین میگین یعنی چی؟ منظورتون از کوانتوم چیه؟! اینجا چه معنی داره؟ لطفا هر حرفی میزنید با دلیل و توضیحات باشه

سوداگر
پنج شنبه 03 آذر 1390, 14:01 عصر
اونم دیدم -کوانتومی که دارین میگین یعنی چی؟ منظورتون از کوانتوم چیه؟! اینجا چه معنی داره؟ لطفا هر حرفی میزنید با دلیل و توضیحات باشه

ببینید شما توی محیط ویندوز اگه Process های نمایش داده شده در TaskManager رو یه دید بندازی میبینی که غیر از برنامه شما، برنامه هایی مثل explorer.exe و taskmgr.exe و خیلی از برنامه های دیگه در حال اجرا هستند و هر کدوم از اون ها با زمانی که CPU به آن ها تخصیص می دهد به فعالیت خود ادامه میدهند. اون 7 دقیقه فعالیت برنامه ای که با سی شارپ نوشتید، واقعاً 7 دقیقه نیست! چرا- چون زمانی که CPU درگیر اون برنامه بوده خیلی کمتر از 7 دقیقه هست.
"کوانتوم" تکه زمان هایی است که CPU به برنامه ها اختصاص می دهد مثلا ممکن است برنامه جاوای شما به 500 کوانتوم 2 میلی ثانیه ای نیاز داشته باشد و این کوانتوم ها پشت سر هم به برنامه تخصیص داده شوند. اما برنامه ای که با سی شارپ نوشته شده باشد، به 480 کوانتوم 2 میلی ثانیه ای نیاز داشته باشد ولی هر یک از این کوانتوم ها ""پس از 5 میلی ثانیه ای که به برنامه دیگر، اختصاص داده شده"" به برنامه شما اختصاص داده شود.
در این صورت، زمان اجرای برنامه ی جاوایی در عمل، خیلی سریعتر است. اما از نظر واقعیت ماجرا، برنامه سی شارپ، 20 کوانتوم کمتر، از CPU دریافت کرده پس 40 میلی ثانیه، سریعتر از برنامه جاوایی عمل کرده است.

امیدوارم مقصود خودم را رسانده باشم.

در ضمن، برنامه ای که نوشتید، دائماً i را داخل حلقه چاپ میکند و از نظر فنی کار اشتباهی است که برای تست سرعت محاسبه، یک عمل iolimited را با یک عمل cpulimited قاطی کنیم.
چاپ کردن روی مانیتور، یک عمل زمانبر تلقی می شود.

milad reisi
پنج شنبه 03 آذر 1390, 14:25 عصر
دوست عزیز،من خوب میدونم که کوانتوم زمانی چیه و سیاست های زمان بندی رو ازش خبر دارم،،منظورم از اون سوالا این بود که با شرایطی که گفتیم شما چطور میتونید بحث کوانتوم زمانی رو وسط بیارین؟ اصلا کسی از سیاستهای زمان بندی ویندوز خبر داره؟ اگه منبعی هست معرفی کنید
خدمتتون عرض کردم که شرایط یکسان بوده،همه برنامه های جانبی بسته شدن-وقتی جاوا اجرا میشد فقط برنامه جاوا در حال اجرا بوده و سی شارپم همین شرایطو داشته،همون برنامه هایی که واسه جاوا در پس زمینه اجرا میشدن واسه سی شارپم بودن،این تست نه یک بار،بلکه چند بار انجام شده،پس نمیشه گفت که اینجا شرایط متفاوت بوده یا در زمان اجرای سی شارپ یه برنامه دیگه وقت cpu رو گرفته باشه-جتی سیستم امنیتی نورتون وقتی که برنامه سی شارپ اجرا میشد اخطار داد که مواظب این برنامه باشین که زیادی داره از cpu استفاده میکنه ولی واسه جاوا اینطور نبود و اینم باعث تعجب ما شد


کار اشتباهی است که برای تست سرعت محاسبه، یک عمل iolimited را با یک عمل cpulimited قاطی کنیم.
این حرف در کل درست است و اینجا فقط بحث سزعت محاسبات است،اما بدون قسمت IO هم برنامه امتحان شده و اختلاف با زمانی که IO بوده خیلی جزئی و قابل چشم پوشی بوده،میتونید امتحان کنید

سوداگر
پنج شنبه 03 آذر 1390, 14:26 عصر
اینم نتیجه اجرای من بدون دستور نوشتن i توی سی شارپ!

78334


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

archDevil
پنج شنبه 03 آذر 1390, 14:48 عصر
اینم نتیجه اجرای من بدون دستور نوشتن i توی سی شارپ!
با سلام خدمت شما دوست عزیز و تشکر از کاری که انحام دادین وکد ما رو تست کردین این نشان از اهمیت موضوع برای شماست ولی بهتر بود که کد جاوا رو نیز تست می کردین تا مقایسه کامل بود و اختلاف رو متوجه می شدیم .

امیدوارم مفهوم کوانتوم و اجرا بودن دیگر پروسس ها هنگام تست رو درست رسونده باشم.

همون طور که دوست عزیز من (milad reisi)خدمت شما گفتن ما این کد رو روی سیستم های مختلفی تست کردیم اما اختلاف تغییری نکرد پس بنا به گفته شما دوست عزیز می تونیم نتیجه بگیریم که این اختلاف مربوط به قدرت زبان باشه نه شرایط سیستم اگر شما جاوا رو هم تست می کردین باز نسبت به این قضیه مطمئن تر می شدیم.
حالا ما از تمامی دوستان اساتید و صاحب نظران خواهش می کنیم که هر روشی یا هر ایده ای برای تست کردن و مقایسه بلدند را در این تاپیک قرار دهند که باعث افزایش سطح سواد سایرین شود.
با تشکر از کل دوستان

سوداگر
پنج شنبه 03 آذر 1390, 15:22 عصر
ولی بهتر بود که کد جاوا رو نیز تست می کردین تا مقایسه کامل بود و اختلاف رو متوجه می شدیم .
نتبینز نداشتم:گیج:
برای تست ترسیمات گرافیک در این دو زبان توصیه می کنم اشکال اپیسایکلیک رو روی فرم بکشیم، مثلاً با این الگوریتم:
اول، مبدا مختصات را به وسط صفحه انتقال می دهیم و سپس این کدها:

R=63
S=14
T=17.5
U=10.5
N=-17
M=19
L=1000
For A = 0 To 2*Pi Step 0.0005
X=R*cos(A) + S * cos(N*A) + T* cos(M*A)+100
Y=R*sin(A) + S * sin(N*A) + T* sin(M*A)+100
'در اینجا قرار می گیرد (x,y) دستور رسم نقطه در مختصات
Next A


این شبه کدی نزدیک به VB بود.
موفق باشید.

wolf_majid
پنج شنبه 03 آذر 1390, 16:54 عصر
فکر می کنم مقایسه برابر نبوده تصاویر ضمیمه رو ببینید (تصویر 1 حاصل اجرای کد شماست + اینترنت گردی و تصویر 2 حاصل اجرای کد تغییر یافتست + اینترنت گردی)

کد تغییر یافته :
درسته به خطوطه کد اضافه شده ولی نتیجش رو ببینید

int[][] a;
a = new int[3000][];
for (int i = 0; i < 3000; i++)
a[i] = new int[3000];

int[][] b;
b = new int[3000][];
for (int i = 0; i < 3000; i++)
b[i] = new int[3000];

int[][] c;
c = new int[3000][];
for (int i = 0; i < 3000; i++)
c[i] = new int[3000];

for (int i = 0; i < 3000; i++)
{
for (int j = 0; j < 3000; j++)
{
a[i][j] = 50;
b[i][j] = 50;
}
}
DateTime t = new DateTime();
t = DateTime.Now;

for (int i = 0; i < 3000; i++)
{
Console.WriteLine(i);

for (int j = 0; j < 3000; j++)
{
for (int k = 0; k < 3000; k++)
{
c[i][j] = a[i][k] * b[j][k];
}
}
}

DateTime t2 = new DateTime();
t2 = DateTime.Now;

Console.WriteLine("end of calculation");

Console.WriteLine(t2.Hour - t.Hour);
Console.WriteLine(t2.Minute - t.Minute);
Console.WriteLine(t2.Second - t.Second);
Console.WriteLine(t2.Millisecond - t.Millisecond);

Console.WriteLine("press enter");

Console.ReadLine();

archDevil
پنج شنبه 03 آذر 1390, 18:59 عصر
با سلام خدمت شما دوست گرامی (wolf_majid) و عرض تشکر از شما برای روش جدید وتستی که انجام دادین بهتر این بود که همین روش را نیز با جاوا انجام می دادین. ولی باز به خاطر کاری که انجام دادین تشکر می کنیم و ما با روش شما نیز کد نویسی را تکرار کردیم و نتیجه بدس اومده از سی شارپ بر روی همان سیستم بهتر شد و لی باز جاوا با روش جدید سریع تر از سی شارپ عمل کرد و زمان بدست آمده به شرح زیر بود:
سی شارپ:3:30
جاوا2:26

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

archDevil
پنج شنبه 03 آذر 1390, 19:49 عصر
با سلام خدمت دوستان
کد جدید جاوا که با روش آقای (wolf_majid) برابر باشد. برای کسانی که قصد تست کردن دارند کد زیر است:

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package javaapplication6;

import java.util.Date;
import java.util.Random;

/**
*
* @author Mohsen
*/
public class JavaApplication6 {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {

Random rnd=new Random(99);
int [][]a=new int[3000][];

for (int i = 0; i < 3000; i++) {
a[i]=new int[3000];

}
int [][]b=new int[3000][];

for (int i = 0; i < 3000; i++) {
b[i]=new int[3000];
}
int [][]c=new int[3000][];

for (int i = 0; i < 3000; i++) {
c[i]=new int[3000];
}
for (int i = 0; i < 3000; i++)
{

for (int j = 0; j < 3000; j++)
{
a[i][j] = rnd.nextInt();
b[i][j] = rnd.nextInt();
}
}
Date d=new Date();
long s1=d.getSeconds();
long m1=System.currentTimeMillis();
long mi1=d.getMinutes();
for (int i = 0; i < 3000; i++)
{
System.out.println(i);

for (int j = 0; j < 3000; j++)
{
for (int k = 0; k < 3000; k++)
{
c[i][j] = a[i][k] * b[j][k];

}
}
}
Date d2=new Date();
long s2=d2.getSeconds();
long m2=System.currentTimeMillis();
long mi2=d2.getMinutes();
System.out.println("end of calculation");
System.out.println(mi1);
System.out.println(mi2);
System.out.println(s1);
System.out.println(s2);
System.out.println(m1);
System.out.println(m2);


System.out.println(mi2-mi1);
System.out.println(s2- s1);
System.out.println(m2 - m1);

System.out.println("press enter");




}
}

wolf_majid
پنج شنبه 03 آذر 1390, 20:04 عصر
int در جاوا چه محدوده ای داره ؟ (تا چه عددی را ساپورت می کنه ؟)

milad reisi
پنج شنبه 03 آذر 1390, 21:01 عصر
int در جاوا چه محدوده ای داره ؟ (تا چه عددی را ساپورت می کنه ؟)

int در جاوا 4 بایتی است و بازه اون از 2,147,483,648- تا 2,147,483,647 است

Amir Oveisi
پنج شنبه 03 آذر 1390, 21:39 عصر
آیا شما برنامه ها رو از طریق IDE‌ اجرا کردید؟
اگر اینکار رو کردید پیشنهاد می کنم یک بار خود فایل های خروجی اجرایی برنامه ها رو اجرا کنید و همینطور کامپایل شده در حالت release (نه debug).
من در ویندوز ۸ برای #C این زمان رو داشتم (با شرایطی که گفتم اجرا کردم - و البته کد شما رو تغییر ندادم):
00:01:27:329
متاسفانه دسترسی به کامپایلر جاوا نداشتم تا تست کنم.

Amir Oveisi
پنج شنبه 03 آذر 1390, 21:43 عصر
با شرایطی که گفتم و کدهای آقای wolf_majid (http://barnamenevis.org/member.php?85916-wolf_majid) زمان بدست اومده:
00:00:38:45

Amir Oveisi
پنج شنبه 03 آذر 1390, 21:51 عصر
با کدی که جناب wolf_majid (http://barnamenevis.org/member.php?85916-wolf_majid) نوشتند و ایجاد یک تغییر در نحوه محاسبه زمان (به جای DateTime‌ از System.Threading.Timer استفاده شده ) زمان میشه:
00:00:24:50

omidh2007
پنج شنبه 03 آذر 1390, 22:30 عصر
int در جاوا چه محدوده ای داره ؟ (تا چه عددی را ساپورت می کنه ؟)

تا 1-31^2
اینجا Datatype های جاوا رو با MinValue , MaxValue نوشته .

http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Integer.html

milad reisi
جمعه 04 آذر 1390, 00:06 صبح
جناب Amir Oveisi منظورتون از شرایط همین ویندوز 8 هست؟

milad reisi
جمعه 04 آذر 1390, 00:11 صبح
از همه دوستانی که پیگیر هستند و توی بحث شرکت میکنند ممنونم،ولی لطفا اگه مقایسه میکنید هر دو زبان رو تست کنید تا بتونیم مقایسه درستی انجام بدیم

Amir Oveisi
جمعه 04 آذر 1390, 00:19 صبح
توجه کنید که امکان نداره performance‌ یک برنامه زمانی که از طریق IDE‌ اجرا شده با زمانی که مستقیم (بدون دخالت IDE) فایل اجراییش run شده باشه یکسان باشند. شما چطوری میگید هر دو حالت رو تست کردید و جواب یکسان گرفتید؟
بنده از طریق IDE که اجرا می کنم نزدیک ۷ دقیقه طول میکشه (با کد شما). اما همون برنامه وقتی مستقیم run بشه زمانش به ۱ دقیقه و نیم کاهش پیدا میکنه.

Amir Oveisi
جمعه 04 آذر 1390, 01:22 صبح
جناب Amir Oveisi منظورتون از شرایط همین ویندوز 8 هست؟

ویندوز ۸ - اجرای فایل release بصورت مستقیم (یعنی از IDE اجراش نمیکنم)

سوداگر
جمعه 04 آذر 1390, 01:23 صبح
سلام
کسی راجع به کدهایی که در پست بیستم گذاشتم نظری نداره؟ (بررسی ترسیمات گرافیکی در این دو زبان)

مثل اینکه اینجا هم داره یواش یواش مثل این تاپیک (http://barnamenevis.org/showthread.php?310304-%D8%A8%D8%AD%D8%AB-%D8%AF%D8%B1-%D9%85%D9%88%D8%B1%D8%AF-%D9%86%D8%AD%D9%88%D9%87-%D9%85%D8%AD%D8%A7%D8%B3%D8%A8%D9%87-int-y-x-4-*-x-%D8%AA%D9%88%D8%B3%D8%B7-%DA%A9%D8%A7%D9%85%D9%BE%D8%A7%DB%8C%D9%84%D8%B1-C)سی شارپ رو به چالش می کشونه! جالبه.:چشمک:


از همه دوستانی که پیگیر هستند و توی بحث شرکت میکنند ممنونم،ولی لطفا اگه مقایسه میکنید هر دو زبان رو تست کنید تا بتونیم مقایسه درستی انجام بدیم
باز هم میگم، نت بینز، کامپایلر نیست که فرمودید نسخه 7 ، لطفاً نسخه JDK و JRE مورد استفاده را بگویید تا هماهنگ باشیم.

Amir Oveisi
جمعه 04 آذر 1390, 02:05 صبح
مثل اینکه اینجا هم داره یواش یواش مثل این تاپیک سی شارپ رو به چالش می کشونه! جالبه.
کسی هدفش به چالش کشوندن چیزی نبوده در این تاپیک. بحث و گفتگویی پیرامون موضوع کاملا مشخصی بوده. همین!


کسی راجع به کدهایی که در پست بیستم گذاشتم نظری نداره؟ (بررسی ترسیمات گرافیکی در این دو زبان)
معیار سنجش performance‌ در این مدل به چه شکل هست؟

سوداگر
جمعه 04 آذر 1390, 03:55 صبح
سلام!
منظورم از به چالش کشیدن، نقد و بررسی ویژگی ای از #C هست که به ذهن خیلی ها خطور نمی کند :گیج:

معیار سنجش performance‌ در این مدل به چه شکل هست؟
هیچی فقط تعداد نقاط زیادی (به step داخل حلقه بستگی دارد) را روی مانیتور چاپ می کند و طرح هایی مثل زیر، ایجاد می شوند:
http://barnamenevis.org/attachment.php?attachmentid=78127&d=1321756469

با VB6 اینها را کشیده بودم که برای هر کدام چیزی در حدود 6-10 ثانیه، برنامه مشغول بود گفتم شاید بشه سرعت ترسیمات گرافیکی توسط جاوا و سی شارپ رو هم اینطوری بررسی کنیم. چطوره؟

Amir Oveisi
جمعه 04 آذر 1390, 19:17 عصر
از همه دوستانی که پیگیر هستند و توی بحث شرکت میکنند ممنونم،ولی لطفا اگه مقایسه میکنید هر دو زبان رو تست کنید تا بتونیم مقایسه درستی انجام بدیم

بنده با JDK 7 update 1 با IDE Net Beans 7.0.1 کد جاوای بهینه شده شما رو (آخرین کدی که قرار دادید)‌ رو تست کردم و نتیجه به این شکل شد:
00:00:46:47

همونطور که در پست های قبلی هم اشاره کردم برای #C با دات نت ۴ و IDE Visual Studio 2010 و کامپایل شده به صورت release نتیجه به شکل زیر شد:
(با استفاده از System.Threading برای محاسبه زمان‌)
00:00:24:50
تقریبا دو برابر سریع تر.

(با استفاده از DateTime برای محاسبه زمان)
00:00:38:45


در ضمن هر دو تست با خروجی 64bit در Win 8 انجام شده.

archDevil
جمعه 04 آذر 1390, 20:26 عصر
با سلام و تشکر خدمت تمامی دوستان
لازم می بینیم از دوستانی که در این تاپیک تا به حال فعالیت کردند تشکر کنم
ما برنامه ها رو دوباره به شیوه های که آقای Amir Oveisi گفتند در محیط کنسول تکرار کردیم و نتیجه این شد که #C سریع تر از جاوا ظاهر شد. البته یک سوال در این بین مطرح می شود که چرا زمانی ارایه دو بعدی را توسط خود سی شارپ تعریف می کنیم خیلی کند تر از روشی است که کد را بهینه کردیم؟ اما در جاوا انچنان تفاوتی نداشت؟
این بار گرافیک هر دو را تست کردیم به این روش که 50000 بیضی را با مختصات رندم رسم کردیم سی شارپ در حالت release و exe شده آن را در 12 ثانیه انجام داد اما جاوا آن را در 1 ثانیه انجام داد
از دوستان خواهش میکنم که این کد ها را امتحان و نتیجه را در تاپیک قرار دهند و همچنین اگر روشی برای بهینه یا افزایش سرعت هر کدام دارند در این تاپیک جهت آموزش مطرح نمایند.

کد سی شارپ:
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 WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Paint(object sender, PaintEventArgs e)
{

Form mform=(Form)sender;
Random rnd=new Random();

Pen p = new Pen(Color.Black);
int sec = DateTime.Now.Second;
double msec = DateTime.Now.Millisecond;
for (int i = 0; i < 50000; i++)
{
e.Graphics.DrawEllipse(p, rnd.Next(0, mform.Width), rnd.Next(mform.Height), 10, 20);
}

int sec2 = DateTime.Now.Second;
double msec2 = DateTime.Now.Millisecond;
MessageBox.Show((sec2 - sec).ToString());
MessageBox.Show((msec2 - msec).ToString());

}

private void Form1_Load(object sender, EventArgs e)
{

}

}
}


کد جاوا:
/*
* DrawLineApp.java
*/

package drawline;

import org.jdesktop.application.Application;
import org.jdesktop.application.SingleFrameApplication;
import java.awt.*;
import java.awt.event.*;
import java.util.Date;
import java.util.Random;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

/**
* The main class of the application.
*/
public class DrawLineApp extends SingleFrameApplication {

/**
* At startup create and show the main frame of the application.
*/
@Override protected void startup() {
show(new DrawLineView(this));
}

/**
* This method is to initialize the specified window by injecting resources.
* Windows shown in our application come fully initialized from the GUI
* builder, so this additional configuration is not needed.
*/
@Override protected void configureWindow(java.awt.Window root) {
}

/**
* A convenient static getter for the application instance.
* @return the instance of DrawLineApp
*/
public static DrawLineApp getApplication() {
return Application.getInstance(DrawLineApp.class);
}

/**
* Main method launching the application.
*/
public static void main(String[] args) {

Frame f = new Frame("Have a nice day!");
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
f.add(new SmileyCanvas(Color.BLACK), BorderLayout.CENTER);
f.pack();
f.show();
}
}

class SmileyCanvas extends Canvas{

public SmileyCanvas(Color faceColor) {
setForeground(faceColor);
}

@Override
public Dimension getPreferredSize() {
return new Dimension(300,300);
}




/*
* Paint when the AWT tells us to...
*/
@Override
public void paint(Graphics g) {
// Dynamically calculate size information
// (the canvas may have been resized externally...)
Random r=new Random();
Date d=new Date();
long s1=d.getSeconds();
long m1=System.currentTimeMillis();
long mi1=d.getMinutes();


for (int i = 0; i < 50000; i++)
{
g.drawOval(r.nextInt(300),r.nextInt(300),10,20);
}

Date d2=new Date();
long s2=d2.getSeconds();
long m2=System.currentTimeMillis();
long mi2=d2.getMinutes();
JOptionPane.showMessageDialog(this, "sec: "+String.valueOf(s2-s1));
JOptionPane.showMessageDialog(this, "Mili sec: "+String.valueOf(m2-m1));
}
}

سوداگر
جمعه 04 آذر 1390, 22:46 عصر
خوب من این دو برنامه رو اجرا کردم توی سی شارپ (WinForm) حدود 10 ثانیه طول کشید ولی در جاوا (DesktopApp) یک ثانیه بود.
این وسط یه جای کار به نظرم می لنگه ................
و اون، نمایان نشدن فرم اصلی در جاواست! این بدین معناست که کلاس فرم توسط سی شارپ ساخته شده و نقاط روی فرم رسم میشوند ولی در جاوا فقط فایل drawlineApp.java اجرا میشود. برای امتحان این چیزی که گفتم، توی نت بینز، روی فایل DrawlineApp.java راست کلیک کرده و Run File را بزنید، مشاهده خواهید کرد که نتیجه ی آن، با Run کردن کل برنامه هیچ تفاوتی ندارد!

78392

شما باید همانطوری که در سی شارپ، 50,000 بیضی را روی فرم اصلی رسم کرده اید، 50,000 بیضی را در جاوا هم روی فرم اصلی رسم می کردید که این اشتباه، باعث میشود که سی شارپ چندین ثانیه، کندتر، عمل کند.
یک اشتباه دیگر هم، استفاده از تابع رندم بود که نباید از آن استفاده شود دلیل آن هم در آخر پست 16 نوشته بودم.
====================================
یه سوال؟
با چه دستوری توی سی سارپ و جاوا می توانم نقطه رسم کنم + مبدا مختصات را به وسط مونیتور ببرم(ضروری):خجالت:

موفق باشید.

mmd2009
شنبه 05 آذر 1390, 01:16 صبح
دوستان عزیز نوع تاپیک رو از حالت خبر به گفتگو تغییر دادم چون به نظر من اینجا گفتگو صورت میگیره. البته گفتگوی از نوع خوب که بعد از مدتها میبینم تو انجمن.

موفق باشید

milad reisi
شنبه 05 آذر 1390, 13:39 عصر
و اون، نمایان نشدن فرم اصلی در جاواست! این بدین معناست که کلاس فرم توسط سی شارپ ساخته شده و نقاط روی فرم رسم میشوند ولی در جاوا فقط فایل drawlineApp.java اجرا میشود.

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

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

milad reisi
شنبه 05 آذر 1390, 13:55 عصر
با چه دستوری توی سی سارپ و جاوا می توانم نقطه رسم کنم + مبدا مختصات را به وسط مونیتور ببرم

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

راه دیگشم استفاده از bitmap در هر دو هست،از این سایتا میتونی استفاده کنی
سی شارپ : http://stackoverflow.com/questions/476255/access-to-a-single-pixel-in-c-sharp

جاوا : http://www.cap-lore.com/code/java/JavaPixels.html

archDevil
یک شنبه 06 آذر 1390, 14:10 عصر
با سلام خدمت دوستان گرامی
ما کد رسم بیضی ها(تاپیک شماره 38#) را بر روی فرم در #C توسط Picture Box رسم کردیم و نتیجه این شد که #C هم رسم رو در حدود 1 ثانیه انجام داد. ولی تا زمانی که به انتهای متد Paint نرسید اشکال رسم شده را نمایش نداد.
و به نظر شما چه دلیلی می تواند داشته باشد که #C همین رسم را بر روی فرم در 7 ثانیه انجام دهد؟
اما یه چیز جالب تر از همه اینکه دوستان اگه توجه کرده باشند java بیضی ها را دوبار رسم می کند، و با این حال که بر روی فرم رسم می کند خیلی سریعتر از #C عمل می کند؟

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

سوداگر
یک شنبه 06 آذر 1390, 21:45 عصر
با این حال که بر روی فرم رسم می کند خیلی سریعتر از #C عمل می کند؟
شرکت sun جاوا اپلت رو برای آوردن گرافیک به صحنه وب، به میدان فرستاد پس این طبیعی است که راهکارهایی را برای بهینه سازی گرافیک، برروی جاوا پیاده کرده باشند. اما این که میگویید جاوا روی فرم رسم کرده را قبول ندارم، هرگز!
در پست 39 هم دلیل آنرا گفتم، میتوانید امتحان کنید:متفکر:

archDevil
سه شنبه 08 آذر 1390, 16:37 عصر
با سلام خدمت دوستان عزیز

شرکت sun جاوا اپلت رو برای آوردن گرافیک به صحنه وب، به میدان فرستاد پس این طبیعی است که راهکارهایی را برای بهینه سازی گرافیک، برروی جاوا پیاده کرده باشند. اما این که میگویید جاوا روی فرم رسم کرده را قبول ندارم، هرگز!
جناب Dezfoul به دنبال صحبت شما ما با چندین تست و تحقیق دیگر متوجه شدیم که که قدرت گرافیکی بالای جاوا نسبت به سی شارپ در این است که جاوا از Canvas استفاده می کنه که باعث افزایش سرعت گرافیک ان است و ما بدنبال canvas در #C هم بودیم که متاسقانه تا حالا چیزی پیدا نکردیم و تا به حال متوجه شدیم که WPF از Canvas استفاده می کنه.و ما از دوستان و صاحب نظران خواستاریم که اگه قدرتی شبیه به این را در #C سراغ دارند را در این تاپیک برای آموزش به دیگران قرار دهند.

با تشکر

سوداگر
سه شنبه 08 آذر 1390, 16:52 عصر
قدرت گرافیکی بالای جاوا نسبت به سی شارپ
هنوز که چیزی معلوم نیست.:لبخند:
معلوم نیست اگه به جای PictureBox از یه کامپوننت دیگه استفاده کنیم هنوز هم زمان ترسیم در سی شارپ پایین تر بیاد.:متفکر:
چون بالاخره خروجی سی شارپ exe هست و مثل جاوا نیازی به تفسیر شدن توسط اینترپرتر ندارد، مطمئنا سی شارپ باید سریع تر این ترسیمات را انجام دهد.

archDevil
سه شنبه 08 آذر 1390, 17:47 عصر
هنوز که چیزی معلوم نیست
دوست عزیز همون طور که توی تاپیک های قبلی خدمت شما عرض کردیم ما به جای انشاء قوی سعی بر محتوای قوی داریم این جمله ای هم که توی دو تا پیک قبلی خدمت شما عرض کردیم منظور تا به حال و در جواب گفته شما بود

شرکت sun جاوا اپلت رو برای آوردن گرافیک به صحنه وب، به میدان فرستاد پس این طبیعی است که راهکارهایی را برای بهینه سازی گرافیک، برروی جاوا پیاده کرده باشند. اما این که میگویید جاوا روی فرم رسم کرده را قبول ندارم، هرگز!
و همون طور که در تاپیک شماره(45) باز خدمت شما عرض کردیم گفتیم که جاوا این قدرت رو درون خودش دارد

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

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

Amir Oveisi
سه شنبه 08 آذر 1390, 18:53 عصر
لطفا از لفظ اشتباه #C‌ به جای Windows Form App استفاده نکنید.
این #C‌ نیست که سرعتش زیاد یا کمه بلکه Windows Form App در دات نت هست که سرعت براش مفهموم داره.

jblaox
چهارشنبه 09 آذر 1390, 01:26 صبح
چه بحث پوچی (جسارت به کسی نباشه ، نظر شخصی من است)

هر زبانی را برای کاری ساختن و فقط میتوانی دو زبان که برای کار مشابه ای ساخته شده با هم مقایسه کنی ؟

آیا به نظر شما کارهای که به راحتی میشود با C#‎ کرد میشود با جاوا کرد ؟ و یا برعکس ؟؟

اگر سرعت انجام اعمال ریاضی برای شما مهم ، میتوانی زبان برنامه نویسی Fortran از زباله دان زبان های برنامه نویسی در بیاوری و تست کنی ببینی وقتی این دوتا ماتریس (500.000 * 500.000) در هم رضب میکنی زمان انجام کار ان 0.1 ثانیه هم طول نمیکشه (چه اعشاری باشه چه صحیح)...

توضیح :
بیشتر از فورترن در CFD که خدای محاسبات استفاده میشود

اینجور حرکت ها (مقایسه دو زبان مختلف) اشتباه است ، مثل این که بگوید 2 متر بیشتر یا 2 کیلوگرم ؟؟؟

اینجا (http://www.cse.scitech.ac.uk/arc/jaspa.shtml)را نگاه کنید C و Java و Fortran با هم مقایسه کرده ، جالب نوع کامپایلر و اندازه ماتریس و ... همه و همه روی سرعت اجرا تاثیر گذار بوده و ....

موفق باشید

سوداگر
چهارشنبه 09 آذر 1390, 01:58 صبح
سلام!

متوجه شدیم که WPF از Canvas استفاده می کنه
با تشکر از آقای اویسی
من هم باید این رو هم اضافه کنم که وجود تگی به نام canvas در WPF هیچ رابطه ای با canvas در جاوا ندارد و معماری این دو کاملاً متفاوت است.

کسی قصد محکوم کردن یا مقایسه بین این دو زبان را ندارد
یکی از برچسب های همین تاپیک این است که --> #C بهتر است یا جاوا :لبخندساده:
البته چند سایت دیگه هم از عنوان JAVA Versus #C استفاده کرده بودند. بی خیال!

آیا به نظر شما کارهای که به راحتی میشود با C#‎‎‎‎‎‎ کرد میشود با جاوا کرد ؟ و یا برعکس ؟؟
بحث سر راحتی انجام کارها نیست، بحث سر سرعت انجام همان کاری است که در دو زبان میتوان انجام داد.
بالفرض این مقایسه بیهوده باشد ولی در این بین مطالبی گفته شد که در نوع خودش جالب و بی نظیر بود. خیلی از سایت های فرنگی! همین مقایسه را انجام داده اند اما مثل stackoverflow بعد از 3 پست، تاپیک قفل شد، در اینجا نه تنها تاپیک قفل نشد بلکه مدیران هم وارد بحث شدند و در برخی جاها، انحرافات را تذکر دادند و حتی خودشان برنامه را کامپایل و اجرا کردند! امیدوارم دیگر افراد هم آیه یأس نخوانند چون اگر این موضوع جالب نبود، خود آنها روی لینک تاپیک، کلیک نمی کردند و با اینترنت لاکپشتیشان، وقت نازنینشان را به این بحث های به اصطلاح خودشان بیهوده تلف نمی کردند.
-------------------------------------------------------------------------
و در آخر چند مقاله مرتبط با موضوع همین تاپیک پیدا کردم که در نوع خودش جالب بود:
مقاله اول (http://www.manageability.org/blog/archive/20030520%23p_the_problem_with_cameron)
مقاله دوم (حتماً بخوانید) (http://www.tommti-systems.de/go.html?http://www.tommti-systems.de/main-Dateien/reviews/languages/benchmarks.html)
این مقاله دوم این زبان ها را جوری که من، در ابتدای این تاپیک مد نظرم بود بررسی کرده است یعنی اکثر معیارهایی که رابطه خیلی مستقیمی با Performance برنامه های نوشته شده با این زبانها دارد را بررسی کرده. نتیجه این شد که:
اول ++C بعد #C بعد JAVA.

موفق و سربلند باشید.

mmd2009
چهارشنبه 09 آذر 1390, 02:14 صبح
چه بحث پوچی (جسارت به کسی نباشه ، نظر شخصی من است)

هر زبانی را برای کاری ساختن و فقط میتوانی دو زبان که برای کار مشابه ای ساخته شده با هم مقایسه کنی ؟

آیا به نظر شما کارهای که به راحتی میشود با C# کرد میشود با جاوا کرد ؟ و یا برعکس ؟؟

اگر سرعت انجام اعمال ریاضی برای شما مهم ، میتوانی زبان برنامه نویسی Fortran از زباله دان زبان های برنامه نویسی در بیاوری و تست کنی ببینی وقتی این دوتا ماتریس (500.000 * 500.000) در هم رضب میکنی زمان انجام کار ان 0.1 ثانیه هم طول نمیکشه (چه اعشاری باشه چه صحیح)...

توضیح :
بیشتر از فورترن در CFD که خدای محاسبات استفاده میشود

اینجور حرکت ها (مقایسه دو زبان مختلف) اشتباه است ، مثل این که بگوید 2 متر بیشتر یا 2 کیلوگرم ؟؟؟

موفق باشید


با سلام.

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

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

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

موفق باشید

Javad_Darvish_Amiry
چهارشنبه 09 آذر 1390, 04:15 صبح
درود بر همه دوستان. من تست ها رو انجام ندادم چون کامپایلر جاوا رو سیستمم ندارم؛ و بحث رو فقط از دید تئوری دنبال میکنم. صحبتم هم روی تست اولی هست که استارتر عزیز مطرح کردن. تو اون تست شرایط یکسان نبوده، از این نظر که نوع آرایه ای که برای #C ساختید و نوعی که برای Java ساختید با هم فرق دارند. یعنی


// C#‎
int[,]
// Java
int [][]


اگه دقت کنید میبینید نوع آرایه ها با هم فرق داره. همونطور که میدونید ما در Java دو نوع تعریف آرایه داریم: یک بعدی و چند بعدی؛ که چند بعدی در جاوا همیشه Jagged Array هست؛ آرایه ای از آرایه ها.

اما در #C سه نوع تعریف آرایه داریم: آرایه یک بعدی، آرایه چند بعدی مربع و آرایه ی چند بعدی Jagged (نمیدونم فارسی Jagged چی میشه؛ شرمنده ام). تعریفی که شما در تست اول برای #C استفاده کردید، از آرایه دو بعدی مربع استفاده کردید، در حالیکه در Java از Jagged استفاده کرده بودید. در حالیکه برای داشتن شرایط یکسان، باید آرایه #C رو هم Jagged در نظر میگرفتین؛ که این تو اصلاحیه ای که یکی از دوستان بعدا فرستاد و آرایه سی شارپ رو به [][] تغییر دادید، نتیجه خودشو نشون داد.
نکته اش هم اینه که آرایه مربع در سی شارپ، وقتی میخواد تو حافظه بشینه، همه عناصر آرایه در همه ابعاد پشت سر هم قرار میگیرند، اما در Jagged هر بعد اشاره گری هست به عضو متناظر خودش تو بعد دقیقا بعد از خودش که میتونه هرجایی از حافظه باشه (که در جاوا هم دقیقا به همین صورت هست). آرایه های مربع تو سی شارپ از مصرف حافظه کمتر و Jaggedها از سرعت بالاتر برخوردارند.
نکته: وقتی در تست دوم (یعنی [][] برای سی شارپ) سرعت اجرای #C بالاتر رفت، دوستمون فرمودند که «به نظر ما این یک ایراد سی شارپ می باشد که روشی که برای گرفتن ارایه دو بعدی معرفی کرده کند تر از روشی باشد که برنامه نویس خودش حافظه بگیرد...» خوب مسئله اصلا چیزی نیست که مطرح شده (فکر میکنم، طبق توضیحات بالا)؛ بلکه تو تست دوم فقط نوع تعریف آرایه تو سی شارپ عوض شده (و در واقع تازه با تعریفی که تو کد جاوا استفاده شده بود، برابر شده => شرایط یکسان). یعنی همون کد اول هم اگه با نوع تعریف درست آرایه (منظور از درست معادل بودن با تعریف در جاوا) برای سی شارپ تست بشه، نتیجه مطلوب بدست میاد.
از طرف دیگه، اینکه تو تست دوم هم نتیجه سی شارپ کندتر بوده، فکر میکنم (با درصد بالایی) بر میگرده به نوع کامپایل برنامه (در حالت debug)؛ (یه نکته آموزشی هم داره اینکه خیلی از دوستان عزیز -از جمله خود بنده حقیر- موقع کامپایل نهایی برنامه (مرحله production) یادمون میره که برنامه باید در حالت release کامپایل بشه نه debug و تحویل کارفرما بشه (مخصوصا اگه دوستان وب-کار حضور دارن، تو برنامه های تحت وب) -این پرانتز رو وسط بحث اصلی ببخشید). که دات نت در حالت دیباگ بسیار کند عمل میکنه. -نتیجه، تستهایی که جناب اویسی انجام دادن، نتایج کاملا متفاوتی بدست آوردن.

در مورد گرافیک، تجربه خیلی کمی تو گرافیک با جاوا دارم و نظرم رو بسیار با احتیاط بیان میکنم. اگه نکته ای هست با کمال میل میشنوم و بابت اشتباه احتمالی پیشاپیش عذر میخوام.

توی سی شارپ رسم داره روی Form انجام میشه که درست نیست؛ چون Form طراحی و بهینه شده برای اینکه بعنوان یه Container عمل کنه. اما توی Java داریم رسم رو روی Canvas که یه شیئ گرافیکی هست انجام میدیم؛ باز هم میشه قیاس مع الفارق. که جمله ی

شما باید همانطوری که در سی شارپ، 50,000 بیضی را روی فرم اصلی رسم کرده اید، 50,000 بیضی را در جاوا هم روی فرم اصلی رسم می کردید که این اشتباه، باعث میشود که سی شارپ چندین ثانیه، کندتر، عمل کند.
دقیقا شرح همین موضوعه؛ اما متاسفانه استدلال پیروش فکر میکنم درست نبود؛ برای اشیاء گرافیکی معادل توی سی شارپ (ویندوز-فرم منظورم هست) میشه از خیلی از کنترل ها مثل Label و PictureBox و Button استفاده کرد که برای انجام کارهای گرافیکی خیلی بهینه تر هستند.






پاورقی:
خیلی بحث جالبی بود (و هست و امیدوارم بمونه) و من واقعا لذت بردم و کلی هم چیز یاد گرفتم. از همه دوستان مخصوصا archDevil و milad reisi که بحث رو شروع کردن به سهم ناچیز خودم تشکر میکنم. همتون زنده باشین. دمتون گرم
(http://barnamenevis.org/member.php?158476-archDevil)

سوداگر
چهارشنبه 09 آذر 1390, 05:06 صبح
سلام!
ممنون از شما دوست عزیز

از طرف دیگه، اینکه تو تست دوم هم نتیجه سی شارپ کندتر بوده، فکر میکنم (با درصد بالایی) بر میگرده به نوع کامپایل برنامه (در حالت debug)؛ (یه نکته آموزشی هم داره اینکه خیلی از دوستان عزیز -از جمله خود بنده حقیر- موقع کامپایل نهایی برنامه (مرحله production) یادمون میره که برنامه باید در حالت release کامپایل بشه نه debug و تحویل کارفرما بشه (مخصوصا اگه دوستان وب-کار حضور دارن، تو برنامه های تحت وب) -این پرانتز رو وسط بحث اصلی ببخشید). که دات نت در حالت دیباگ بسیار کند عمل میکنه. -نتیجه، تستهایی که جناب اویسی انجام دادن، نتایج کاملا متفاوتی بدست آوردن.
راجع به این جمله باید بگم که آقای اویسی اشاره کردند که نباید برای تست برنامه از IDE استفاده بشه و باید فایل نهایی (exe - jar) اجرا بشه. ما هم فایل اجرایی رو امتحان می کنیم و به Debug یا Release بودن اون مربوط نمیشه.

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

Javad_Darvish_Amiry
چهارشنبه 09 آذر 1390, 05:52 صبح
عذر میخوام جناب دزفولی عزیز؛ قصد تقابل ندارم خدای نکرده؛ فقط برای روشن تر شدن ذهن خودم عرض میکنم. این که فرمودید:
به Debug یا Release بودن اون مربوط نمیشه باید جسارتا عرض کنم که مربوط میشه؛ وقتی تو مد Release کد سی شارپ رو کامپایل میکنید، کلی optimization توسط خود کامپایلر انجام میگیره، که خیلی تو بهبود برنامه تاثیر داره. مثلا

var flag = true;
// continue of coding and flag not changed any where
if(flag){
do_somthing()
}

کامپایل میشه به:

// var flag = true; this will be removed from final assembly
// continue of coding and flag not changed any where
// if(flag){ remove this line too
do_somthing()
// } and this one


موفق باشید.

آپدیت:
جمله آقای اویسی در پست 33:

ویندوز ۸ - اجرای فایل release بصورت مستقیم (یعنی از IDE اجراش نمیکنم)
و در پست 37:

کامپایل شده به صورت release نتیجه به شکل زیر شد
و جمله جناب archDevil در پست 38:

سی شارپ در حالت release و exe شده آن را در 12 ثانیه انجام داد اما جاوا...
که همگی اشاره به کامپایل شدن به صورت release دارند.
موید باشید.

Hossenbor
چهارشنبه 09 آذر 1390, 07:56 صبح
آیا از این میشه نتیجه گرفت که جاوا همه دستوراتو با هم ترجمه میکنه ولی سی شارپ خطی راستی یک سوال جاوا هم مثل سی شارپ دو بار کامپایل میشه?

Amir Oveisi
چهارشنبه 09 آذر 1390, 09:08 صبح
آیا از این میشه نتیجه گرفت که جاوا همه دستوراتو با هم ترجمه میکنه ولی سی شارپ خطی
متوجه منظورتون نشدم تو اين جمله.


جاوا هم مثل سی شارپ دو بار کامپایل میشه
دو بار كامپايل شدن زياد جمله درستي نيست به نظرم. هر دو اين زبان ها پس از كامپايل به كد مياني تبديل ميشن و كد هاي مياني توليد شده در زمان اجرا در جاوا توسط JVM و در برنامه هاي دات نت با JIT به كد ماشين مقصد تبديل شده و اجرا ميشن. عمل دوم (يعني تبديل كد مياني به كد ماشين هدف ) رو كامپايل نميشه گفت (چون كامپايل شرايط متفاوت و تعاريف متفاوتي داره) و Interpret بيشتر بهش ميخوره.

پ.ن
كاربران گرامي لطفا سعي كنيد پست هاي ارساليتون پيرامون موضوع تاپيك باشه و از به حاشيه كشيده شدن بحث و يا انحراف موضوع بحث جلوگيري بشه.

پ.پ.ن

(نمیدونم فارسی Jagged چی میشه)
من تو يه كتابي ديدم اين رو آرايه جنگلي ترجمه كرده بود!

با تشكر

Hossenbor
چهارشنبه 09 آذر 1390, 09:30 صبح
منظورم اینه که یک برنامه دارم ده بار یک پیام نشون میده ایا این پیام یکبار ترجمه میشه که ده بار اجرا بشه یا ده بار ترجمه منو بگو کلا نامید شدم اخه یک پروژ به اسمه farc++ داشتم که برای برنامه نویسی که یک مترجم بود و ساینتکس شبیه سی شارپ رو به سی پلاس پلاس ترجمه میکرد اینطور که شما صحبت می کنید باید برم یک چند سالی اموزش ببینم

سوداگر
چهارشنبه 09 آذر 1390, 10:05 صبح
سلام
چند تا سوال در مورد بهینه سازی کدهایی که در حالت release کامپایل می شوند داشتم.
1) آیا این بهینه سازی روی کدهای IL انجام میشه یا مثل همین کدی که گذاشتید، روی خود کدهای #C انجام میشه؟
2) برای مقایسه این دو زبان، اشکالی ندارد که از این بهینه سازیها انجام دهیم؟ (مثلاً ممکنه برای جاوا هم یک گزینه ای موجود باشد که بایت کدها را بهینه کند!)
اما در کل به همان تستی که در آن مقاله دومی که گفتم معتقدم (سلام چند تا سوال در مورد بهینه سازی کدهایی که در حالت release کامپایل می شوند داشتم. 1) آیا این بهینه سازی روی کدهای IL انجام میشه یا روی خود کدهای #C؟ 2) برای مقایسه این دو زبان، اشکالی ندارد که از این بهینه سازیها انجام دهیم؟ (مثلاً ممکنه برای جاوا هم یک گزینه ای موجود باشد که بایت کدها را بهینه کند!) اما در کل به همان تستی که)

من تو يه كتابي ديدم اين رو آرايه جنگلي ترجمه كرده بود!
منم توی کتاب ++C در 21 روز دیدم آرایه ارّه ای ترجمه کرده بود!

Amir Oveisi
چهارشنبه 09 آذر 1390, 10:49 صبح
1) آیا این بهینه سازی روی کدهای IL انجام میشه یا مثل همین کدی که گذاشتید، روی خود کدهای #C انجام میشه؟
بهينه سازي هم توسط كامپايلر بر روي source code انجام ميشه و هم توسط JIT در زمان اجراي برنامه بر روي IL Code اعمال ميشه. بيشترين بهينه سازي توسط خود JIT انجام ميشه اما تفاوت اصلي كه خروجي debug با release داره اينه كه در حالت debug برنامه با هدف بيشترين قابليت debugging كامپايل ميشه و كلي كد اضافه توسط كامپايلر در خروجي برنامه inject ميشه (مثلا debug symbol ها ) تا بتونيم بيشترين اطلاعات ممكن رو براي debug كردن برنامه از خروجي بگيريم (مثلا StackTrace براي Exception ها).
اما در حالت release اولا اين كه اين symbol ها به خروجي اضافه نميشن و دوم اينكه برنامه به شكلي كامپايل ميشه كه هدف بهينه بودن از نظر سرعت باشه و ديگه توجهي به قابليت debugging نميشه در اين حالت.
در خيلي از برنامه هايي كه مي نويسيد (مخصوصا برنامه هايي كه سايز فايل اجرايي شون زياده) اگر دقت كنيد مي بينيد كه معمولا سايز فايل خروجي وقتي با release كامپايل ميشه كمتر از حالت debug هست.


2) برای مقایسه این دو زبان، اشکالی ندارد که از این بهینه سازیها انجام دهیم؟ (مثلاً ممکنه برای جاوا هم یک گزینه ای موجود باشد که بایت کدها را بهینه کند!)
من متاسفانه آشنايي چنداني با جاوا ندارم ولي مسلما خيلي خوب بود اگر كسي كه آشنايي كافي در اين مورد با جاوا داره راهكار هاش رو اعلام كنه تا هم آشنا بشيم و هم با اون راهكار ها هم تست كنيم.

archDevil
چهارشنبه 09 آذر 1390, 12:38 عصر
با سلام و عرض خسته نباشید
با تشکر از جناب Javad_Darvish_Amiry که لطف کردن جواب خیلی از سوالاتی رو که در طول آزمایشات مطرح بود و دوستان به آن ها توجه نداشتن رو دادن و این نشان از توجه بالای ایشان است. ولی یک مسئله هست که برای من روشن نشد اینکه شما فرمو دین:

ما در #C سه نوع تعریف آرایه داریم: آرایه یک بعدی، آرایه چند بعدی مربع و آرایه ی چند بعدی Jagged (نمیدونم فارسی Jagged چی میشه؛ شرمنده ام). تعریفی که شما در تست اول برای #C استفاده کردید، از آرایه دو بعدی مربع استفاده کردید، در حالیکه در Java از Jagged استفاده کرده بودید. در حالیکه برای داشتن شرایط یکسان، باید آرایه #C رو هم Jagged در نظر میگرفتین؛ که این تو اصلاحیه ای که یکی از دوستان بعدا فرستاد و آرایه سی شارپ رو به [][] تغییر دادید، نتیجه خودشو نشون داد.

و اما یک سوال
اگر ما بخواهیم یک آرایه 3 بعدی در جاوا تعریف کنیم باز هم با یک خط کد میتوانیم اینکار را انجام دهیم،اما اگر بخواهیم اینکار را در سی شارپ انجام دهیم و سرعت مهم باشد(آرایه jagged) برای تعریف آرایه در ابتدا لازم است که 3 حلقه تودرتو داشته باشیم که این خود عامل کاهش سرعت است-حالا هرچه بعدها بیشتر شوند سی شارپ نسبت به جاوا کندتر میشود-آیا در سی شارپ چیزی معادل جاوا وجود دارد؟

Javad_Darvish_Amiry
چهارشنبه 09 آذر 1390, 17:14 عصر
جناب archDevil درود بر شما. خواهش میکنم. من از شما ممنونم. والله در جواب شما، من دیدگاه شخصی خودم رو میگم که شاید خیلی هم فنی نباشه؛ منتظر نظر دوستان دیگه و اساتید هم هستم.
ببینید، از یه طرف باید به اهدافی که هر تکنیک یا قابلیت یا امکان یا نحوی که هر زبان داره توجه بشه. مثلا jaggedها برای این بوجود اومدن که بتونیم انواعی که آرایه ای از آرایه ها هستند در اختیار داشته باشیم؛ یعنی بعد دوم (به بعد) این امکان فراهم باشه که آرایه با طول های متفاوت داشته باشیم؛ شخصا اینطور فکر میکنم که این یه قابلیت در #C هست که شما دسترسی به هر دو نوع آرایه های چند بعدی از نوع square و jagged رو داشته باشید. در واقع قابلیتی که Java نداره (هر جور حساب کنیم، #C تقریبا 10 سال بعد از Java بوجود اومد و طبیعیه که خیلی از قابلیت ها، قوت ها و ضعف های زبان/بستر بزرگی مثل Java/J2xE موقع ایجاد C#/.NET در نظر گرفته شده باشه). یعنی شما توی Java برای یه ماتریس ساده 2 × 2 همون هزینه ی حافظه رو پرداخت میکنی که برای یه آرایه ی jagged (از نظر ساختار حافظه عرض میکنم). اما توی #C به این نکته توجه شده و امکان دستیابی به هر دو نوع فراهم شده تا در جایگاه مناسب از هر کدوم استفاده بشه. شما در یه square 3000 × 3000 میزان حافظه ای که مصرف میکنید، شامل 9000000 حافظه برای int و یه (فقط 1) سربار اضافه برای نوع Array هستید، اما در jagged علاوه بر 9000000 خونه برای int ها، 3000 تا هم نوع Array دارید! طبیعتا اینکه شما تو چه موقعیتی کدوم مورد براتون اهمیت بیشتری داشته باشه، تعیین کننده اینه که از چی بخواید استفاده کنید. #C به ما امکان انتخاب میده، اما تو Java عملا این امکان انتخاب وجود نداره.
از طرف دیگه، این که بخوایم بگیم هزینه اضافه ای تو #C پرداخت میشه، به زعم من خیلی صدق نمیکنه. شما توی جاوا هم در هر صورت، دو تا کار رو انجام میدید؛ یک اینکه از موتور میخواید یه آرایه 3000 عنصری براتون ایجاد کنه که هر عضوش یه اشاره گر هست به یه آرایه ای 3000 عنصری دیگه؛ یعنی در مجموع 3000 × 3000 نقطه از حافظه باید لحاظ بشه برای دستور مورد نظرتون؛ حالا اینکار تو جاوا با یه خط دستور از زبان خواسته میشه، ولی در #C با چند خط دستور؛ دو اینکه برای مقدار دهی به اعضا، باید حلقه رو پیمایش کنید؛ که تو این بخش فرقی بین #C و Java نیست.
خوب توی #C میتونید همزمان با پیمایش برای init کردن، قبلش، سایز ابعاد دیگه رو هم مشخص کنید؛ یعنی خیلی تفاوتی ایجاد نمیشه؛
تست اول رو به این شکل تغییر دادم، ببینید نظرتون چی هست:


int[][] a = new int[3000][];
int[][] b = new int[3000][];
int[][] c = new int[3000][];

for(int i = 0; i < 3000; i++) {
a[i] = new int[3000];
b[i] = new int[3000];
c[i] = new int[3000];
for(int j = 0; j < 3000; j++) {
a[i][j] = 50;
b[i][j] = 50;
}
}
var begin = DateTime.Now;
for(int i = 0; i < 3000; i++) {
for(int j = 0; j < 3000; j++) {
for(int k = 0; k < 3000; k++) {
c[i][j] = a[i][k] * b[j][k];
}
}
}
var def = DateTime.Now - begin;

Console.WriteLine(def.ToString());
Console.ReadLine();


پیروز باشید.

mmd2009
چهارشنبه 09 آذر 1390, 20:20 عصر
off Topic

برای گسترش بحث و درخواست دوستان تاپیکی برای دعوت از برنامه نویسان جاوا هم در تالار مربوط به جاوا گذاشته شد. برای مشاهده این تاپیک میتونید ایجارو (http://barnamenevis.org/showthread.php?315987-%D9%85%D9%82%D8%A7%DB%8C%D8%B3%D9%87-%D8%AF%D9%88-%D8%B2%D8%A8%D8%A7%D9%86-%D8%AC%D8%A7%D9%88%D8%A7-%D9%88-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE-%D8%AF%D8%B1-%D9%86%D8%AD%D9%88%D9%87-%D8%B9%D9%85%D9%84%DA%A9%D8%B1%D8%AF)ببینید.

موفق باشید

mp_mp353
چهارشنبه 03 اسفند 1390, 22:49 عصر
خوب دوستان نظر دیگه ای ندارید؟
بحث خوبیه حیف نیست ادامه ندیم؟

mrbm_2007
چهارشنبه 03 اسفند 1390, 23:58 عصر
سلام بر اساتید اهل فن:تشویق:
شاید یکم از با موضوع اصلی بی ارتباط باشه ولی بد نیست همزمان حداقل با یه زبان Native هم مقایسه بشه
مثلا فورترن که میگن خیلی سریعتره چقدر با این نتایج فرق می کنه؟:متفکر:
واقعا ارزشش رو داره برای بعضی پروژه های محاسباتی رفت سمت این زبان ها؟ یا میشه این زبان های Native رو با زبان های منیج شده ترکیب کرد؟

mehdi zanjani
شنبه 06 اسفند 1390, 22:00 عصر
با تشکر از همه ی عزیزانی که تو این تاپیک تاپیک پست گذاشتن ولی من تقریبا با اکثرا بچه ها مخالفم چرا؟؟؟؟؟؟

چون اونی که با سی شارپ کد مینیویسه و از برنامه نویسی تو وِزوال استودیو لذت میبره تو کله اش نمیره جاوا سریع تره جاوا بهتره جاوا تو همه پلت فرم ها اجرا میشه اینا هیچ کدوم تو مغز 1 سی شارپ نویس نمیره.
من خودم به شخصه نه تا حالا با جاوا برنامه نوشتم نه علاقه ای دارم به جاوا چرا؟؟؟ چون جاوا نه WPF داره نه WCF داره نه XNA داره نه Windows Azure داره نه Silverlight داره نه . . .
مقایسه ای ن 2 تا زبون هیچ فایده ای نداره چون قدرت و امکانات برابری ندارن!

mehdi zanjani
شنبه 06 اسفند 1390, 22:10 عصر
در ضمن 1 نگاهی هم به PDF ضمیمه شده بندازید میبینید که سی شارپ از لحاظ دستوری و Syntax خیلی شبیه به هم هستن چون سی شارپ تقریبا خیلی از ویژگی هاش رو از جاوا گرفته خود آندرس هلسبرگ هم دقیقا همین مسئله رو عنوان میکنه و مقایسه این 2 تا زبون رو از پایه اشتباه میدونه!

archDevil
شنبه 13 اسفند 1390, 22:43 عصر
با سلام خدمت تمام دوستان و اساتید گرامی
با عرض پوزش از دوستان یه مدتی به جهت مشغله درسی و کاری سرمون شلوغ بود نتونستیم دنباله تاپیک رو پی گیری کنیم.


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

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



چون اونی که با سی شارپ کد مینیویسه و از برنامه نویسی تو وِزوال استودیو لذت میبره تو کله اش نمیره جاوا سریع تره جاوا بهتره جاوا تو همه پلت فرم ها اجرا میشه اینا هیچ کدوم تو مغز 1 سی شارپ نویس نمیره.

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

من خودم به شخصه نه تا حالا با جاوا برنامه نوشتم نه علاقه ای دارم به جاوا چرا؟؟؟ چون جاوا نه WPF داره نه WCF داره نه XNA داره نه Windows Azure داره نه Silverlight داره نه . . .
اجازه بدهیم که داشته و نداشته و نقاط ضعف و قوت هر زبان به تدریج و با دلیل و منطق روشن شود.


مقایسه ای ن 2 تا زبون هیچ فایده ای نداره چون قدرت و امکانات برابری ندارن!

در ضمن 1 نگاهی هم به PDF ضمیمه شده بندازید میبینید که سی شارپ از لحاظ دستوری و Syntax خیلی شبیه به هم هستن چون سی شارپ تقریبا خیلی از ویژگی هاش رو از جاوا گرفته خود آندرس هلسبرگ هم دقیقا همین مسئله رو عنوان میکنه و مقایسه این 2 تا زبون رو از پایه اشتباه میدونه!

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