گفتگو هایی در باب سی شارپ

the_king

مدیرکل انجمن
توی زامارین 2 تا مشکل دارم . اول اینکه برنامه بسیار بسیار کند لود میشه و کلا کارهاش انجام میشه . پیام میده که یه چیزی بنام Android Virtual Device رو باید فعال کنم تا سرعتش 10 برابر بیشتر شه ولی همچین گزینه ای رو پیدا نمیکنم . از کجا میتونم فعال کنم؟
تا حال ازش استفاده ای نکردم، حتی تیک نصب شدنش رو هم برداشتم، اما راهنمای Troubleshooting اش در سایتش هست، آخرای صفحه :
Visual Studio Android Emulator
کند بودنش که طبیعیه، خود ویژوال استدیو همینطوری خیلی سبک نیست چه برسه به اینکه کد چند پلتفرمی و شبیه ساز هم بهش اضافه بشه. اگه google android studio رو امتحان کنید بهتر معنی کندی رو درک میکنین. قطعا راه هایی برای افزایش سرعت اش هست اما انتظار معجزه نداشته باشید، شبیه ساز ها وقتی سرعت شون بالا است که مورد ضعیفی رو شبیه سازی کنند، برای اندروید و سخت افزار متعارف اش نمیشه توقع زیادی داشت.
Five Ways to Boost Xamarin.Forms App Startup Time - Xamarin Blog
دوم اینکه برنامه ای که توی زامارین درست کردم ، اصلا بعد از اجرای پروژه ، در جایی نیست . حتی در لیست application ها !! این برنامه ی نوشته شده ، خودش و آیکونش پس کجاست تا اجرا کنم؟
متوجه نمیشم، کدوم لیست اپلیکیشن ها؟ برنامه اندروید ئه، نوع سخت افزار خروجی رو انتخاب می کنید و Deploy اش می کنید تا فایل هاشو بسازه و روی گوشی نصبش کنید یا روی گوشیتون Live Player نصب می کنید تا با Live Player ارسال کنید روی گوشی تون تا اجرا اش کنه.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
تا حال ازش استفاده ای نکردم، حتی تیک نصب شدنش رو هم برداشتم، اما راهنمای Troubleshooting اش در سایتش هست، آخرای صفحه :
Visual Studio Android Emulator
کند بودنش که طبیعیه، خود ویژوال استدیو همینطوری خیلی سبک نیست چه برسه به اینکه کد چند پلتفرمی و شبیه ساز هم بهش اضافه بشه. اگه google android studio رو امتحان کنید بهتر معنی کندی رو درک میکنین. قطعا راه هایی برای افزایش سرعت اش هست اما انتظار معجزه نداشته باشید، شبیه ساز ها وقتی سرعت شون بالا است که مورد ضعیفی رو شبیه سازی کنند، برای اندروید و سخت افزار متعارف اش نمیشه توقع زیادی داشت.
Five Ways to Boost Xamarin.Forms App Startup Time - Xamarin Blog

ممنون استاد علی
یعنی android studio کند تره؟
بعد اینکه استاد علی ، بعضی ها میگن قدرت android studio در انعطاف و ایجاد برنامه های قدرتمند ، خیلی بیشتر از زامارین هست ؛ درسته؟
حالا واسه من که خیلی کنده . بار اول بالای 5 دقیقه طول میکشه تا اجرا بشه . بارهای بعدی هم دست کمی از بارهای اول نداره



متوجه نمیشم، کدوم لیست اپلیکیشن ها؟ برنامه اندروید ئه، نوع سخت افزار خروجی رو انتخاب می کنید و Deploy اش می کنید تا فایل هاشو بسازه و روی گوشی نصبش کنید یا روی گوشیتون Live Player نصب می کنید تا با Live Player ارسال کنید روی گوشی تون تا اجرا اش کنه.

منظورم لیست اپلیکیشن هایی هست که در زامارین بصورت شبیه سازی انجام میده و بالا میاره
یعنی کدی که در زامارین (در ویژال استودیو) نوشتیم و دکمه ی f5 رو که زدیم ، یه شبیه ساز گوشی میاره که مثل گوشی واقعی ، لیست اپلیکیشن داره و اپلیکیشن های پیش فرض مثل مرورگر اینترنت و google map و ... رو هم همراه خودش داره
حالا توی اون لیست ، اپلیکیشن ای که ما نوشتیم ، وجود نداره
یا بهتر سئوال بپرسم که چجوری میشه برای اپلیکیشن مون در زامارین ، آیکون ست کنیم تا در لیست اپلیکیشن ها نشون بده؟
من درفایل MainActivity کد زیر رو نوشتم :


کد:
using Android.App;
using Android.Widget;
using Android.OS;

namespace App2
{
    [Activity(Label = "App2", MainLauncher = true, Icon = @"C:\Users\SomSaj\Desktop\New folder\png.png")]
    public class MainActivity : Activity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);
        }
    }
}

یعنی در اتریباتس ActivityAttributes ، پروپرتی Icon رو هم مقداردهی کردم که مسیر فایل png ام به عنوان آیکون هست . با اونکه نوع این پروپرتی ، string هست ولی با مقداردهی پروپرتی Icon در کد بالا ، کمپایلر ارور میده که string رو قبول نمیکنه و یه همچین چیزایی!!
چرا ارور میده و باید چجوری آیکون ست کرد برای اپلیکیشن مون؟
 

the_king

مدیرکل انجمن
ممنون استاد علی
یعنی android studio کند تره؟
بعد اینکه استاد علی ، بعضی ها میگن قدرت android studio در انعطاف و ایجاد برنامه های قدرتمند ، خیلی بیشتر از زامارین هست ؛ درسته؟
حالا واسه من که خیلی کنده . بار اول بالای 5 دقیقه طول میکشه تا اجرا بشه . بارهای بعدی هم دست کمی از بارهای اول نداره
نمیتونم مقایسه کنم چون با xamarin کار نکردم اما Android Studio کند ئه و اعصاب خورد کن. البته باید در نظر گرفت که Android Studio یه محصول به نسبت جدید ئه، عمرش قابل قیاس با Visual Studio و تکاملی که به مرور زمان داشته نیست. خود Android Studio هم در نسخه اولیه مشکلاتش خیلی زیاد بوده و از Eclipse بیشتر استقبال میشده و انتخاب اول برنامه نویسی برای اندروید بوده. به تدریج Android Studio پیشرفت کرده که حالا بصورت یه انتخاب قابل قبول مطرح شده. این رو میگم که شاید وضعیتی که الان xamarin داره و کیفیتش در نسخه های بعدی تغییر کنه و بهتر بشه.

منظورم لیست اپلیکیشن هایی هست که در زامارین بصورت شبیه سازی انجام میده و بالا میاره
یعنی کدی که در زامارین (در ویژال استودیو) نوشتیم و دکمه ی f5 رو که زدیم ، یه شبیه ساز گوشی میاره که مثل گوشی واقعی ، لیست اپلیکیشن داره و اپلیکیشن های پیش فرض مثل مرورگر اینترنت و google map و ... رو هم همراه خودش داره
حالا توی اون لیست ، اپلیکیشن ای که ما نوشتیم ، وجود نداره
یا بهتر سئوال بپرسم که چجوری میشه برای اپلیکیشن مون در زامارین ، آیکون ست کنیم تا در لیست اپلیکیشن ها نشون بده؟
من درفایل MainActivity کد زیر رو نوشتم :


کد:
using Android.App;
using Android.Widget;
using Android.OS;

namespace App2
{
    [Activity(Label = "App2", MainLauncher = true, Icon = @"C:\Users\SomSaj\Desktop\New folder\png.png")]
    public class MainActivity : Activity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);
        }
    }
}

یعنی در اتریباتس ActivityAttributes ، پروپرتی Icon رو هم مقداردهی کردم که مسیر فایل png ام به عنوان آیکون هست . با اونکه نوع این پروپرتی ، string هست ولی با مقداردهی پروپرتی Icon در کد بالا ، کمپایلر ارور میده که string رو قبول نمیکنه و یه همچین چیزایی!!
چرا ارور میده و باید چجوری آیکون ست کرد برای اپلیکیشن مون؟
در مورد xamarin تجربه ای ندارم و هیچ کمکی نمی تونم بکنم. من جای شما باشم با روال Getting Started و Tutorial های موجود در اینترنت پیش میرم چون نه راهنمای فیلد ها رو مطالعه کرده اید و نه به مبانی سیستم عامل اندروید آشنا هستید. در هر صورت اینکه یک مسیر فایل سیستم عامل ویندوز رو به Icon بدهید قاعدتا صحیح نیست، با مسیر های /drawable@ کار میشه.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
ممنون
استاد علی ، چرا در کد زیر ، ارث بری انجام نمیشه و بعد از گذاشتن نقطه بعد از شی this در متد Test ، متد GenericTest در کلاس پدر نمیاد؟ :


کد:
        public class Generics1<T> where T :  IComparable, ICloneable, IConvertible, IEnumerable, IComparable<String>, IEnumerable<char>, IEquatable<String>
        {
            public int GenericTest()
            {
                return 8;
            }
        }

        public class Generics2<T> where T : Generics1<T>, IComparable, ICloneable, IConvertible, IEnumerable, IComparable<String>, IEnumerable<char>, IEquatable<String>
        {
            public int Test()
            {
                this.
                return 5;
            }
        }

یعنی در کلاس Generics2<T> با اونکه گفتم از کلاس Generics1<T> ارث بری کنه ، اما ارث بری در جنریک ها معنا نداره؟!

---------------------------

ویرایش : متوجه شدم . باید بعد از ارث بری ، شرط برای T میذاشتم (یه لحظه فکر کردم درون شرط T باید ارث بری هم انجام بدم .
کد درست :

کد:
        public class Generics2<T> : Generics1<T>  where T :  IComparable, ICloneable, IConvertible, IEnumerable, IComparable<String>, IEnumerable<char>, IEquatable<String>  
        {
            public int Test()
            {
                return 5;
            }
        }
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
در مورد xamarin تجربه ای ندارم و هیچ کمکی نمی تونم بکنم. من جای شما باشم با روال Getting Started و Tutorial های موجود در اینترنت پیش میرم چون نه راهنمای فیلد ها رو مطالعه کرده اید و نه به مبانی سیستم عامل اندروید آشنا هستید. در هر صورت اینکه یک مسیر فایل سیستم عامل ویندوز رو به Icon بدهید قاعدتا صحیح نیست، با مسیر های /drawable@ کار میشه.

استاد علی ، اصلا نمیشه خودتون این قضیه ی ست کردن آیکون رو تست کنین؟
از هر کسی پرسیدم (در چند انجمن) ، یا راهکاری دادن که قبلا بکار بردم و افاقه نکرد یا بلد نبودن
آموزش های فارسی و انگلیسی در اینترنت رو هم پیگیری کردم ولی بازم تاثیری نداشت بکار بردن شون
آخه جای تعجب داره که چرا آیکون پیش فرض تعبیه نمیکنن تا بشه نرم افزار رو از آندروید مجازی اجرا کرد !
 

the_king

مدیرکل انجمن
استاد علی ، اصلا نمیشه خودتون این قضیه ی ست کردن آیکون رو تست کنین؟
از هر کسی پرسیدم (در چند انجمن) ، یا راهکاری دادن که قبلا بکار بردم و افاقه نکرد یا بلد نبودن
آموزش های فارسی و انگلیسی در اینترنت رو هم پیگیری کردم ولی بازم تاثیری نداشت بکار بردن شون
آخه جای تعجب داره که چرا آیکون پیش فرض تعبیه نمیکنن تا بشه نرم افزار رو از آندروید مجازی اجرا کرد !
معلومه که نه، من که نمیخوام برنامه اندرویدی بسازم. ربطی هم #C و این تاپیک هم نداره. شما هنوز راهنما های خود سایت xamarin رو مطالعه نکردید، مثل کسی که یک دستگاه پیچیده رو خریده ولی بدون مطالعه دستورالعمل استفاده اش میخواد فوری ازش استفاده کنه. خوب معلومه که نمیشه و به مشکل بر میخورید.
Part 1 - Preparing an Application for Release
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
معلومه که نه، من که نمیخوام برنامه اندرویدی بسازم. ربطی هم #C و این تاپیک هم نداره. شما هنوز راهنما های خود سایت xamarin رو مطالعه نکردید، مثل کسی که یک دستگاه پیچیده رو خریده ولی بدون مطالعه دستورالعمل استفاده اش میخواد فوری ازش استفاده کنه. خوب معلومه که نمیشه و به مشکل بر میخورید.
Part 1 - Preparing an Application for Release

سلام . ممنون
زامارین از سی شارپ استفاده میکنه دیگه :)
بخش Specify the Application Icon در اون لینک رو نگاه کرده بودم . دقیقا همون کارا رو کردم ولی نمیدونم چرا آیکونی ست نشد . من که توی لیست اپلیکشن های آندروید مجازی (بعد از اینکه کارهایی که در لینک بالا که گفته بود را انجام دادم) ، آیکون مورد نظرم رو هر چی گشتم ندیدم!
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلام
استاد علی درست شد
درایور مربوط به گوشی ام ( j5 prime ) رو نصب کردم . بعدش نرم افزار sumsung kite 3 رو نصب کردم. بعدش تو ویژال استودیو ، آندروید مجازی ساختم و درست شد و آیکون رو نشون داد و کار کرد

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

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلام
استاد علی ، یه مشکل جدید و عجیبی پیش اومده
شی ای از usercontrol میسازم ، ولی وقتی دارم مینویسم ، توی راهنمای اینتل لایسنس اش ، پروپرتی Text اش رو لیست نمیکنه ! ولی خودم که به زور مینویسم ، اشکالی نمیگیره
با اونکه پروپرتی Text در کلاس usercontrol لیست شده ، چرا توی اینتل لایسنس نمیاره؟! نسخه ی ویژال استودیو ام 15.3.0 هه و نسخه ی دات نت ام 4.7
 

the_king

مدیرکل انجمن
سلام
استاد علی ، یه مشکل جدید و عجیبی پیش اومده
شی ای از usercontrol میسازم ، ولی وقتی دارم مینویسم ، توی راهنمای اینتل لایسنس اش ، پروپرتی Text اش رو لیست نمیکنه ! ولی خودم که به زور مینویسم ، اشکالی نمیگیره
با اونکه پروپرتی Text در کلاس usercontrol لیست شده ، چرا توی اینتل لایسنس نمیاره؟! نسخه ی ویژال استودیو ام 15.3.0 هه و نسخه ی دات نت ام 4.7
به کدش بستگی داره. ممکنه با Attribute ها مخفی شده باشه یا با یه نسخه private ای override شده باشه و ... یا نهایتا Cache ئه Assmebly قبلی درست پاک نشده باشه.
کدتون رو باید ببینم.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
به کدش بستگی داره. ممکنه با Attribute ها مخفی شده باشه یا با یه نسخه private ای override شده باشه و ... یا نهایتا Cache ئه Assmebly قبلی درست پاک نشده باشه.
کدتون رو باید ببینم.

ممنون استاد علی
داخل یک رویدادی از کنترلی درون یوزر کنترل (حالا فرض کنید داخل رویدادی از دکمه ای در Form1) ، این کد رو فقط نوشتم :


کد:
            UserControl a = new UserControl();
            a.Text = "";
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
اینم پروژه اش که پیوست کردم (winrar 5 لازم داره)
داخل هر رویدادی خواستین ، از usercontrol شی بسازید و پروپرتی Text رو فراخونی کنید . اگه واسه ی شما در اینتل لایسنس لیست کنه ، برای من نمیکنه ولی خودم که مینویسم ، مشکلی نمیگیره
 

پیوست ها

  • Amozesh CS.Net Doreh 1.1.rar
    394.2 کیلوبایت · بازدیدها: 5

the_king

مدیرکل انجمن
اینم پروژه اش که پیوست کردم (winrar 5 لازم داره)
داخل هر رویدادی خواستین ، از usercontrol شی بسازید و پروپرتی Text رو فراخونی کنید . اگه واسه ی شما در اینتل لایسنس لیست کنه ، برای من نمیکنه ولی خودم که مینویسم ، مشکلی نمیگیره
مشکلی نداره و لیست هم می کنه. اون گزینه های پایین لیست رو که دستکاری نکرده اید؟
Text.png
 

the_king

مدیرکل انجمن
در ضمن من Setup ئه ویژوال استدیو 2015 رو با سوئیچ های مربوطه آپدیت کردم که مناسب نصب آفلاین باشه، البته برای دانلود فایل های اندروید به V.P.N نیاز بود :
کد:
vs_enterprise.exe /layout E:\VS2015Setup /overridefeeduri "http://go.microsoft.com/fwlink/?LinkID=785882&clcid0x409"
و حجم اش از 12 گیگابایت به 30 گیگابایت رسید که الان خیلی راحت میتونم بگم محتویاتش 9 گیگابایت SDK ویندوز 10 ئه و 4 گیگابایتش مربوط به اندروید ئه و 3 گیگابایتش مربوط به SQL 2016 ئه و 1 گیگابایتش مربوط به Windows Phone ئه و در واقع 17 گیگابایت آپدیت شده اینها است و فقط حدود 1 الی 2 گیگابایت آپدیت خود ویژوال استدیو و اجزاء اصلی شه. و حدود 10 گیگابایت هم تکراری ئه و اصولا دانلود مجدد نمیشه، مگر اینکه خودتون بخواهید کل Setup رو از سایت های دیگه دانلود کنید.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
مشکلی نداره و لیست هم می کنه. اون گزینه های پایین لیست رو که دستکاری نکرده اید؟
مشاهده پیوست 112013

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

در ضمن من Setup ئه ویژوال استدیو 2015 رو با سوئیچ های مربوطه آپدیت کردم که مناسب نصب آفلاین باشه، البته برای دانلود فایل های اندروید به V.P.N نیاز بود :
کد:
vs_enterprise.exe /layout E:\VS2015Setup /overridefeeduri "http://go.microsoft.com/fwlink/?LinkID=785882&clcid0x409"
و حجم اش از 12 گیگابایت به 30 گیگابایت رسید که الان خیلی راحت میتونم بگم محتویاتش 9 گیگابایت SDK ویندوز 10 ئه و 4 گیگابایتش مربوط به اندروید ئه و 3 گیگابایتش مربوط به SQL 2016 ئه و 1 گیگابایتش مربوط به Windows Phone ئه و در واقع 17 گیگابایت آپدیت شده اینها است و فقط حدود 1 الی 2 گیگابایت آپدیت خود ویژوال استدیو و اجزاء اصلی شه. و حدود 10 گیگابایت هم تکراری ئه و اصولا دانلود مجدد نمیشه، مگر اینکه خودتون بخواهید کل Setup رو از سایت های دیگه دانلود کنید.

منظورتون برای قضیه ی زامارین که مطرح کردم هست؟

ممنون
 

the_king

مدیرکل انجمن
توصیه می کنم همیشه با حداقل نسخه Framework ای که کدتون واقعا بهش نیاز داره کامپایل کنید، نه آخرین نسخه ای که دم دست تونه. بالاتر گرفتن نسخه فقط قابل اجرای برنامه رو محدود تر می کنه، اینکه اجرای برنامه نیازمند جدید ترین Framework ها باشه، هیچ مزیت و ارزشی ایجاد نمی کنه.
منظورتون برای قضیه ی زامارین که مطرح کردم هست؟
نه، از این بابت گفتم اگه بعدا جایی دیدید Visual Studio 2017 15.5 رو با حجمی در حد 40 گیگابایت برای دانلود قرار دادن بدونید بیشترش SDK های اضافی ئه و فقط بخش کوچیکی از اون واقعا مربوط به Visual Studio ئه و مورد نیاز ئه و بقیه اش یا همین الان روی سیستم تون نصب شده و یا نسخه قدیمیش رو دارید و فقط بخاطر یکسری تغییرات مختصر نسخه اش ارتقاء پیدا کرده که شاید هیچوقت هم ازش استفاده نکنید و اگه بخواهید هم اون اجزاء مستقل قابل دانلود ئه.
 

SU-57

Active Member
سلام

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

الان من کد زیر رو نوشتم در یک button ولی پنجره messagebox.show با ok بسته نمی شه و مدام تکرار می شه چطور می شه کاری کرد فقط یکبار اجرا بشه

کد:
   Label1:
            {
                int a = 10;
                MessageBox.Show(a.ToString());
               
            }

        goto Label1;

بعد اینکه این label جز کلمات کلیدی c# نبود ولی توی یک سایت نوشته بود که یک شناسه است می خواستم بدونم که شناسه یعنی چی. و اینکه وقتی label رو می نویسم به نظر میاد کلمه کلیدیه اما وقتی به صورت زیر می نویسم ارور میده (طبق نوع داده ها)
کد:
Label label1:

منظورم اینه که اینجور نوشتن اشتباهه دیگه درسته؟
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلام

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

الان من کد زیر رو نوشتم در یک button ولی پنجره messagebox.show با ok بسته نمی شه و مدام تکرار می شه چطور می شه کاری کرد فقط یکبار اجرا بشه

کد:
   Label1:
            {
                int a = 10;
                MessageBox.Show(a.ToString());
              
            }

        goto Label1;

بعد اینکه این label جز کلمات کلیدی c# نبود ولی توی یک سایت نوشته بود که یک شناسه است می خواستم بدونم که شناسه یعنی چی. و اینکه وقتی label رو می نویسم به نظر میاد کلمه کلیدیه اما وقتی به صورت زیر می نویسم ارور میده (طبق نوع داده ها)
کد:
Label label1:

منظورم اینه که اینجور نوشتن اشتباهه دیگه درسته؟
سلام
با شرط باید بنویسید تا بی نهایت فراخونی نشه . برای شرط هم در اینجا ، یه متغییر سراسری من نوشتم (شما هر جور دیگه ای میتونید بنویسید) :


کد:
        int b = 0;
        private void btnLable_Click(object sender, EventArgs e)
        {
            if (b < 1)
            {
                b++;
                goto Label1;
            }

            Label1:
            {
                int a = 10;
                MessageBox.Show(a.ToString());

            }
        }

کلمه ی کلیدی نیست . کلمه ی کلیدی ، آبی هستن
کلمه ی کلیدی رو با نوع داده ای اشتباه گرفتین . هر کلمه ی ی کلیدی ای ه نوع داده ای نیست واسه همین نباید بعدش ، نام متغییری براش در نظر بگیرین
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلام
تازه یه چیز رو فهمیدم
استاد علی ، اون برنامه ای که بتونه همزمان در چند هسته اجرا بشه و قبلا میگفتین ، برنامه نویسی موازی (parallel) میگن؟ یاد گرفتن اش سخته؟ کلا چقدر طول میکشه؟ چقدر مطلب داره؟ خیلی بیشتر از مباحث multi thread هست؟ اگه آره ، چند برابره؟
 

the_king

مدیرکل انجمن
سلام
تازه یه چیز رو فهمیدم
استاد علی ، اون برنامه ای که بتونه همزمان در چند هسته اجرا بشه و قبلا میگفتین ، برنامه نویسی موازی (parallel) میگن؟ یاد گرفتن اش سخته؟ کلا چقدر طول میکشه؟ چقدر مطلب داره؟ خیلی بیشتر از مباحث multi thread هست؟ اگه آره ، چند برابره؟
کلا بله. فقط هم بحث چند هسته نیست، ممکنه چند پردازنده باشه، چند کامپیوتر باشه، چند تا گره روی شبکه باشه، شبکه ای از کامپیوتر ها باشه و ...
اونقدر مطلب داره که یکی از دروس کارشناسی ارشد رشته مهندسی نرم افزار ئه، از لحاظ محتوا خیلی مطلب داره. اما مطلب اش اصلا پیاده سازی الگوریتم و کد نویسی نیست، مباحث طراحی الگوریتم ئه. پیاده سازی الگوریتم و کد نویسی ساده ترین بخش کار ئه، نه سخته و نه وقت گیر. پیچیدگی اش در طراحی الگوریتمهایی ئه که بشه بصورت موازی اجرا کرد. مهم الگوریتم ئه.
الگوریتمی که میخواد موازی باشه باید این قابلیت رو داشته باشه. هر الگوریتمی بدرد اینکار نمیخوره. اول اینکه اصلا بشه به بخش های مستقل تقسیم اش کرد، چون هر الگوریتمی رو نمیشه تقسیم کرد. بخشی که داده مورد نیازش با اجرای بخش دیگه ای بدست بیاد رو که نمیشه موازی اجرا کرد. باید اول اجرای بخش دیگه تموم بشه تا داده مورد نیاز بخش دیگه بدست بیاد. باید مستقل باشن یعنی باید الگوریتم طوری باشه که به بخش های مستقل تقسیم پذیر باشه.
ثانیا این تقسیم بندی موثر و قابل استفاده باشه، یعنی با اجرای موازی اش هم کارایی بهتری بدست بیاد و هم ترافیک داده قابل قبولی داشته باشه. چون تقسیم بندی اولا سربار داره، سرباری که سر همین تقسیم بندی و ارتباط بین قسمت ها ایجاد میشه و ثانیا ترافیک داده ایجاد می کنه، تا داده ها رو بین شون به اشتراک بذاره و باهم هماهنگشون کنه. ممکنه یک الگوریتمی رو تقسیم کنید، ولی اجرای موازی اش بیشتر از اینکه کارایی رو ببره بالا هم کارایی بیاد پایین و هم ترافیک داده غیر قابل قبول ایجاد کنه. ثالثا قابل گسترش باشه، فرضا بشه بجای دو قسمت چهار قسمت اش کرد. ممکنه یک الگوریتمی رو بشه به دو قسمت مستقل تقسیم کرد که موازی اجرا بشن ولی اون قسمتها خودشون قابلیت اجرای موازی رو نداشته باشن و دیگه نشه تقسیم شون کرد.
هر جور الگوریتم و کاربردی برای اجرای موازی مناسب نیست، اصل مطلب اینه. اینطوری نیست که بگید از این به بعد هر چی برنامه می نویسم با تکنیک های موازی سازی پیاده سازی اش می کنم.
 

جدیدترین ارسال ها

بالا