PDA

View Full Version : حرفه ای: دلایل کاهش سرعت



maXXis
دوشنبه 25 آبان 1388, 23:36 عصر
سلام دوستان,
دلایل کاهش سرعت تو برنامه ها چیست؟
مثلا من یک برنامه نوشتم. یکی از فرم هام خیلی طول میکشه تا باز بشه.؟!!!!
بقیه خوب هستن.

Mohammad.Saheb
سه شنبه 26 آبان 1388, 14:40 عصر
از ANTS Performance Profiler استفاده كن

http://www.red-gate.com/products/ants_performance_profiler/index.htm

maXXis
پنج شنبه 05 آذر 1388, 15:00 عصر
خوب این چی هست ؟
چی کار میکنه؟
چجوری کار میکنه؟

majid_vb_2008
پنج شنبه 05 آذر 1388, 15:07 عصر
به نظر من دليل دير باز شدن فرمت اينكه توي لود فرمت به بانك اطلاعاتي وصل مي شي يا كنترلهاي روي فرمت ياده چاره كارم اينكه در اول برنامه يكبار تمام فرم ها رو باز كني بعد ببندي اينجوري فقط همون اول يكم برنامه كند اجرا مي شه كه بنظر من ايراد نيست چون همه نرم افزارهاي بزرگ مثل فتوشاپ هم لود سنگيني دارند

maXXis
دوشنبه 09 آذر 1388, 11:40 صبح
majid_vb_2008 (http://barnamenevis.org/forum/member.php?u=82692),
به نظرت اول بک لود باکس بزارم.
بلد نیستم.
میشه یک نمونه برام بزاری؟

majid_vb_2008
یک شنبه 15 آذر 1388, 10:58 صبح
majid_vb_2008 (http://barnamenevis.org/forum/member.php?u=82692),
به نظرت اول بک لود باکس بزارم.
بلد نیستم.
میشه یک نمونه برام بزاری؟

آره اول پروژت يك فرم اسپلش بزار و داخل اون همه فرم هات رو باز و بسته كن تازه م توني اونارو نبندي فقط مخفي كني اينجوي سرعت نمايش مجدد بيشتر ميشه

ACorvinus
یک شنبه 15 آذر 1388, 13:13 عصر
اگه علت سنگینی فرمتون محاسبات زیاد هستش یه سری به اینجا بزنین :


http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx


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

FiACKER
یک شنبه 15 آذر 1388, 14:04 عصر
دوست عزیز دلیل پایین بودن سرعت برنامه تون اول .Net ای بودن اون هست بعد هم استفاده از کامپوننت و ساختاره برنامه تون !

در .Net به دلیل اینکه کدهای شما به یک زبان میانی (IL) تبدیل می شند سرعت کلن پایین هست ! به همین دلیل معمولا توصیه می شه از زبانهای برنامه نویسی نظیر ویژوال بیسیک و سی شارپ در دات نت در کنار ASP.NET ، برنامه های تحت وب بنویسید ! و برای نوشتن برنامه های ویندوزی و بانک اطلاعاتی از دلفی ، VB6 (که منسوخ شده) و C (که خیلی سخته)استفاده کنید.
بهترین انتخاب برای برنامه های تحت ویندوز مخصوصا بانک اطلاعاتی دلفی هست.

ACorvinus
یک شنبه 15 آذر 1388, 15:04 عصر
دوست عزیز دلیل پایین بودن سرعت برنامه تون اول .Net ای بودن اون هست بعد هم استفاده از کامپوننت و ساختاره برنامه تون !

در .Net به دلیل اینکه کدهای شما به یک زبان میانی (IL) تبدیل می شند سرعت کلن پایین هست ! به همین دلیل معمولا توصیه می شه از زبانهای برنامه نویسی نظیر ویژوال بیسیک و سی شارپ در دات نت در کنار ASP.NET ، برنامه های تحت وب بنویسید ! و برای نوشتن برنامه های ویندوزی و بانک اطلاعاتی از دلفی ، VB6 (که منسوخ شده) و C (که خیلی سخته)استفاده کنید.
بهترین انتخاب برای برنامه های تحت ویندوز مخصوصا بانک اطلاعاتی دلفی هست.


سلام .

با این توصیف هایی که شما کردین از همین لحظه به بعد Microsoft باید بارشو بزار رو دوشش و بره به کره مریخ !!!

هنگامی که برنامه ای که در آن از توابع موجود در کتابخانه کلاس Net. استفاده شده است را کامپایل می کنید، بلافاصله کد قابل فهم برای سیستم عامل و یا کد محلی تولید نمی شود. در عوض کد شما به زبانی به نام سطح میانی مایروسافت و یا به اختصار MSIL تبدیل می شود. لازم به ذکز است این کد برای سیستم عامل خاصی نیست. به عبارت دیگر کد زبانهای دیگر نیز می توانند به MSIL تبدیل شوند (و البته باید تبدیل شوند). هنگام استفاده از ویژوال استودیو برای نوشتن برنامه، این مرحله از کامپایل توسط ویژوال استودیو انجام می شود.
اما برای اجرای یک برنامه توسط سیستم عامل یک مرحله دیگر نیز مورد نیاز است. این مرحله وظیفه ی کامپایلر JIT Just-In-Time است. این کامپایلر کد MSIL یک برنامه را دریافت کرده و آن را به کدی تبدیل می کند که به وسیله سیستم عامل قابل اجرا باشد. بعد از اینکه این تبدیل توسط JIT انجام شد، سیستم عامل میتواند برنامه را اجرا کند.

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

و برعکس توضیحی که شما دادین یا درک کردین، کدها در Net. یه بار کامپایل میشن و 10000000000000000 بار اجرا میشن. فقط خواستم بگم Net Framework. ویژگیهایی داره که برنامه نویسی رو خیلی راحت تر می کنه.

موفق باشین.

DoDoklak
یک شنبه 15 آذر 1388, 16:24 عصر
و برای نوشتن برنامه های ویندوزی و بانک اطلاعاتی از دلفی ، VB6 (که منسوخ شده) و C (که خیلی سخته)استفاده کنید.
بهترین انتخاب برای برنامه های تحت ویندوز مخصوصا بانک اطلاعاتی دلفی هست.

با احترام به نظر دوست گرامی
ولی این طرز تفکر درست نیست

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

این ایراد و سوال هم خیلی مطرح میشود.
همه میپذیرند که سرعت دات نت کمتر از ++VC است ولی در واقع صد در صد چنین نیست!

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

مثل سفر کردن با پای پایده و با ماشین و هواپیما میماند.
برای خرید نان از سرکوچه، راننده تا بخواهد ماشین بزرگ خود را روشن و از پارکینگ خارج کند و برود نان بخرد و برگدد و دوباره ماشین را پارک کند، در این شرایط بدون شک فرد پیاده 5 بار میرود نان میخرد و برمیگردد (حالا بیخیال صف نون وایی شوید!)
ولی اگر بخواهیم مصافتی 100 کیلومتری را برویم آنگاه سرعت و بازدهی ماشین مشخص میشود.

اجرای یک برنامه دات نتی هم شبیه همین موردها است.
شما یک برنامه کوچک دات نتی که درست کنید میبینید از نمونه مشابه ++VC خود کندتر بالا می آید، RAM سبیار بسیار بیشتری میگیرد و کندتر بسته میشود.

در واقع برنامه دات نتی که اجرا میشود کلی خدم و حشم هم لود میشود از جمله هسته CLR و امکانات runtime ان مثل "جمع اوری کننده حافظه هرز" و RAM بسیار بزرگتری از کد نیاز گرفته میشود...
در عوض مثلاً در زمان کار کرد برنامه و در مبنای زیاد و تولید و استفاده همزمان و چند ریسمانی هزاران شی و new سازی و نابود سازی با کیفیت بهتری انجام میشود.
به علت RAM بزرگ که در اول گرفته شده، تعامل با سیستم عامل برای هر یک new کوچک کاهش می یابد و ضمن اینکه "جمع ائری کننده حافظه هرز" اشیای قدیمی new شده و قابل استفاده مجدد را تشخیص داده و دوباره به مصرف میرساند و مدام حافظه را defragment میکند تا از تکه تکه شدن RAM جلوگیری شود.

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

======

ضمن اینکه در سوی دیگر کدهای دات نت به IL کامپایل میشوند و IL توسط کامپایلر JITمخصوص همان سخت افزار و سیستم عامل مقصد کامپایل نهایی و بهینه ای به Native میشود...
این مطلب سرعت بالا آمدن اولیه برنامه را کند میکند ولی به علت انکه کد Native نهایی با توجه به قابلیتهای سخت افزار و در همان رایانه ساخته شده، بسیار سریع خواهد بود، شمن اینکه برنامه شما و یک Exe و dll مشخص و ثابت شکت به راحتی روی سیستم ها و ویندوزهای 32 و 64 از Intel و AMD اجرا شده و روی هر یک با حداکثر بهینه سازی توسط JIT اجرا میشوند.

=====

مطلب آخر اینکه دات نت شامل دستورات ساده و چندخطی و پیچیده و طولانی است...
دستور خواندن اطلاعات از یک دیتابیس خیلی ساده میتواند (DataAdapter1.Fill(DataTable1 باشد که به سرعت نوشته میشود و کند اجرا میشود!!!
یا میتواند استفاده از DataReader باشد که کد بیشتری میخواهد ولی بسیار سریعتر است.

پس هم روش با سرعت اجرای کند (و احتمالاً سریعتر در کد نویسی) داریم و هم روش پرسرعت در اجرا (و احتمالاً طولانی در کدنویسی) پس کسی مجبور نیست و اگر کسی واقعاً سرعت را میخواهد و حاظر از هزینه زمانی کدنویسی بیشتر آن را بپردازد، مشکلی وجود ندارد و کسی که به راحتی در چهار دکمه تابع Fill را استفاده میکند، جایی برای شکایت از سرعت هم ندارد!!!!

بعضی از مزایایی مهم دات نت نسبت به سایر زبانهای برنامه نویسی

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

ضمن اینکه گسترده فعالیت بسیار بازتر است و با پشتیبانی های مایکروسافت بیشتر هم خواهد شد.
در واقع دات نت توانایی ارائه خروجی های زیر را دارد:
1- برنامه های ویندوزی-دسکتاپی
2- ویندوز سرویسها
3- برنامه های وبی از جمله طراحی سایت اینترنتی
4- وب سرویسها

یعنی این پروزه ها به صورت آماده و با فرمان New Project در دسترس هستند.

ضمن اینکه dll ها و کامپونت های کامپایلی به راحتی میتواند در انواع سخت افزارها و محیطها و ویندوزها (مثلاً بدون توجه به 32 بیتی یا 64 بیتی) اجرا شوند.


البته کارهای جزئی و خاص دیگری هم میتوان انجام داد که باز در رده 4 نوع فوق دسته بندی میشوند.
مثلاً:

- ساخت برنامه های ویندوزی تحت WPF به صورت چیدمان سه بعدی.(دسکتاپ و وب!!!)
(
یعنی داس که تقریباً فاقد گرافیک بود...
بعد ویندوز با TextBox و Button و... آمد که دو بعدی بود...
حالا برنامه های WPF میتوانند کنترلرها را در سه بعد چیدمان کنند.

مصلاً حتی فکر کارهایی هم که WPF میتواند انجام دهد را نمیتوانید داشته باشید!
برای درک انعطاف پذیری آن فرض کنید یک TextBox روی یک کره پهن کنید!!!!
یا یک فیلم را همانطور که بخش میشود در runtime مثل مثل یک صفحه نازک فلزی بتابانید!!!
و...
)

- کدنویسی معمولی و تلفیقی WPF برای Silverlight که محصولی جدید و به نوعی رقیب آینده Flash خواهد بود.

- ساخت و توسعه AddOn ها برای Office2007

- ساخت dll و توابع جدید برای خوراندن به SqlServer و استفاده از توابع به طور مستقیم در دستورات T-SQL خود SqlServer
(
این داخل هسته SqlServer اجرا میشود و خیلی با توابع داخلی برنامه تفاوت دارد و کسی که SQL بلد باشد متوجه میشود اضافه کردن دستی یک تابع جدید به توابع ثابت SQL میتواند تا چه حد مفید باشد
)

- طراحی بازی های رایانه تحت XNA برای ویندوز و کنسول XBox360 مایکروسافت.

- برنامه نویسی برای وسایل قابل حمل (از جمله موبایل) که مجهز به Microsoft WinCE باشند.

- بهره گیری از تکنولوژی LINQ برای انواع محصولات که کنترل بی نظیری روی دیتاهای حجمی دست ساز میدهد (
فوق العاده شبیه تفکر SQL است با ابن تفاوت که دیتاها از خود برنامه و در RAM هستند و دستورات کاپایل میشوند و ماهیتی String ندارند...
یک زمان برنامه نویسان مجبور بودند خودشات فایلها باز کنند و دیتاها را دستی بریزند و رکوردی و ترتیبی بخوانند... الآن با وجود بانکهای اطلاعاتی عملاً هیچ کس این کار را نمیکند...
با توصعه LINQ دیگر برای کار روی داده های حجمی هم کد خاصی نخواهید نوشت و درگیر 1+ و 1- نخواهید شد... مثلاً به راحتی با یک فرمان آرایه ای را مرتب میکند یا ماکسیموم و میانگینش را به دست می آورید و...

منبع _H2_