the_king
مدیرکل انجمن
من شبیه google هستم؟ باید اینترنت رو جستجو کنید.خیلی ممنون استاد .
بجز alphavss ، کتابخونه ی دیگه ای در زمینه ی vss نیست که این محدود را نداشته باشه و تنظیماتی که در برنامه مون انجام میدیم ، روی تنظیمات اون کتابخونه هم تاثیر داشته باشه ؟ (یعنی وقتی در برنامه مون از متد CoInitializeSecurity استفاده میکنیم ، توی اون کتابخونه هم تاثیر داشته باشه) .
بله، بر اساس آزمایش هایی کردید اینطور نتیجه گرفتم که نخ و پروسه مجزایی داره که سطح دسترسی اش هم مستقل از سطح دسترسی برنامه شما است.این محدودیت alphavss بخاطر اینه که درون کتابخونه اش ، نخ جدیدی (جدای از نخ برنامه مون) ، تعریف میکنه؟
دو تا پشته در دو بخش متفاوت حافظه قرار دارند، سر و ته شون در موقعیت های متفاوتی است. مثل دو تا آرایه مجزا که هر دو در حافظه RAM هستند ولی شروع و پایان شون آدرس های متفاوتی داره.فقط چند سئوال اینکه ، چرا مقدار پشته برای هر نخ ، فرق میکنه؟ یعنی مقدار پشته برای هر نخ ، بر اساس چه معیاری تعیین میشه که برای هر نخ ، میتونه مقدار متفاوتی داشته باشه؟
کی گفته پشته در هدر فایل اجرایی ساخته میشه؟ اندازه پشته در هدر فایل اجرایی مشخص شده، ربطی به ایجادش نداره.و این پشته وقتی در هدر فایل اجرایی ساخته بشه ، پس برای نخ های جدیدی که بعدا در رویدادها ایجاد میکنیم ، چی؟
به درد برنامه نویسی سریع نمی خوره چون دیگه از امکانات NET. و کنترل های انتزاعی اش نمیتونه استفاده کنه و برنامه نویس باید مثل ++C درگیر مدیریت منابع برنامه و ارتباط API سیستم و پیام های پنجره و ... باشه. به درد برنامه نویسی سیستمی هم نمیخوره چون ویژگی های یک زبان سطح پایین رو نداره.چرا سی شارپ ای که ماشین مجازی و سیستم مدیریت شده ازش حذف بشه ، به درد برنامه نویسی سریع و همچنین سیستمی نمیخوره؟
ربطی نداره. شما فرض کنید که یک بودجه هنگفت در اختیارتون باشه و سخت افزار سیستم تون رو حسابی ارتقاء بدید و سرعت اجرای کد های #C تون 1000 برابر قبل بشه. خوبه؟ مشکل کندی سرعت برطرف شد. حالا که سرعتش بالا رفته می توانید با #C یک چاپگر مجازی بنویسید که بجای چاپ تصویر jpeg ذخیره کنه؟ یک سیستم رمزگذاری Real-Time ساده برای هارد دیسک تون بنویسید که بیت های 0 رو 1 کنه و بیت های 1 رو 0؟ انجام اینکار ها ارتباطی با کندی سرعت #C داره؟چون گفته بودید کندی سی شارپ نسبت به سی پلاس پلاس ، بخاطر clr و کمپایلرش هه .
این دو که درست بشن ، طبعا باید سرعتش بیشتر بشه و به درد برنامه های سیستمی هم تا حدود زیادی بخورن دیگه .
این طور نیست؟ اگه نه ، چرا؟
نهایت کاری که انجام میداد ساختن یک زبان شبیه به ++C میشد، برنامه نویسی که سالها با ++C کار کرده و پروژه های زیادی به این زبان داره بیخودی ++C رو رها کنه و بره سراغ یک زبان مشابه؟بله . اگه مایکروسافت بجای اینکه روی پروژه ی .Net کردن ++C کار میکرد ، حالت برعکسش را انجام میداد ، یعنی روی غیر دات نت و حذف کردن clr در سی شارپ (به منظور سریع تر شدن سی شارپ و اجرای برنامه های سیستمی توسط سی شارپ) کار میکرد ، به نظرم بخش قابل توجهی از کاربران ++C را به خودش جذب میکرد .
برنامه اجرایی NET. به زبان میانی CIL ئه و موقع اجرا تازه باید کامپایل بشه و لزومی هم نداره یکجا و بصورت کامل کامپایل بشه.استاد ، کاربرد کلاس ProfileOptimization ، دقیقا در کجاست؟ :
ProfileOptimization Class (System.Runtime)
Improves the startup performance of application domains in applications that require the just-in-time (JIT) compiler by performing background compilation of methods that are likely to be executed, based on profiles created during previous compilations.docs.microsoft.com
در توضیحاتش نوشته (ترجمه اش که زیاد وارد نیستم) :
کارایی startup (شروع) ئه دامنه های اپلیکیشن را در اپلیکیشن هایی که به کمپایلر زمان اجرا (jit) نیاز دارن ، با اجرای کمپایل کردنِ پشت زمینه ی متدهایی که شبیه به اجرا شدن هستند ، بر اساس پروفایل هایی که در طول کمپایل های قبلی ایجاد شده ، بهبود میده .
که من دقیقا متوجه نشدم منظورش چیه .
منظورش از startup ، فقط زمان شروع اپلیکیشن هست (مثلا تا رویداد Load ویندوز) یا زمان های دیگه هم هست؟
منظورش از دامنه های اپلیکیشن هم متوجه نشدم چیه؟
منظورش از اپلیکیشن هایی که به کمپایلر زمان اجرا (jit) نیاز دارن را هم متوجه نشدم چیه؟ چون همه ی برنامه های سی شارپ ، کمپایلرِ jit را دارند دیگه . چون همه شون clr دارن .
کلا کاربرد این کلاس دقیقا کجاست؟
ممنون استاد
بخش هایی از کد در این لحظه قابل اجرا هستند که ابتدا از کد های زبان میانی CIL به کد زبان ماشین پردازنده ترجمه شدن.
طبعا در پردازنده چند هسته ای میشه در همون حین که یک بخشی از کد کامپایل شده اجرا میشه بخش دیگری در حال کامپایل باشه.
اگر اجرا به بخش هایی برسه که هنوز کامپایل نشدن، کاری نمیشه کرد و باید منتظر کامپایل شدن بمونن و این ایجاد وقفه می کنه. پس چه بهتر که همیشه یک قدم جلو باشیم و پیش از اجرا بشه پیش بینی کرد که کدوم بخش هایی از کد قراره زودتر اجرا بشن تا زودتر کامپایل بشن و وقفه کمتری در اجرا رخ بده.
بر اساس تجربه اجراهای قبلی مشخص میشه که چه بخش های از کد زودتر و به احتمال بالاتری اجرا میشن، به همین خاطر نتیجه تحلیل اجرا های قبلی بصورت پروفایل ذخیره میشه تا بشه برای اجرا های بعدی پیش بینی کرد و در ابتدای اجرا اون موارد پیش بینی شده زودتر کامپایل بشن.
ProfileOptimization این نتایج رو بهینه می کنه و بر اساس خروجی اش اون کد هایی که در اولویت قرار دارن رو پشت پرده کامپایل می کنه تا موقعی که نوبت اجراشون رسید آماده اجرا باشن و احتمال وقفه کمتر بشه.