DotNetZoom
2.97K subscribers
342 photos
18 videos
36 files
606 links
DotNetZoom
💎 Everything about .NET

ارتباط با مدیر و تبلیغات آگهی استخدام:
@mjebrahimi

لینک گروه ASPNET Core:
https://t.iss.one/+ufG25x7lVFgyYTNk
Download Telegram
Forwarded from اِسکیلی Skilly (مهدی کرامتی)
🔗📚 توصیه هایی برای شکل آدرس های URL در وب سایت ها:

در ادامه، توصیه های عمومی که برنامه نویس ها بهتر در طراحی ترکیب آدرس های وب شان رعایت کنند ذکر شده است:

1️⃣ سعی کنید URL ها بیانگر محتوایی باشند که کاربر پس از باز کردن URL آن را خواهد دید، نه اینکه حول محور نحوه پیاده سازی برنامه شما باشند. بعنوان مثال بهتر است به جای ‎/Website_v2/CachedContentServer/FromCache/AnnualReport‎ از ‎/Articles/AnnualReport استفاده شود.

2️⃣ سعی کنید بجای استفاده از اعداد در آدرس از حروف استفاده کنید. مثلا بجای ‎/Articles/2392 از ‎ /Articles/AnnualReportاستفاده کنید.
اگر بخاطر کاهش تعداد کوئری هایی که قرار است به دیتابیس بزنید نیاز به شناسه کتاب دارید داشتن آدرسی مانند ‎/Articles/2392/AnnualReport بهتر است. تایپ چنین آدرسی کمی بیشتر زمان می برد، اما مخاطب شما درک بهتری از محتوای آدرس خواهد داشت. همچنین داشتن چنین آدرسی در بهبود رتبه سایت شما در موتورهای جستجو نیز تاثیر دارد. هنگام خواندن این آدرس در برنامه کافی است فقط قسمت عددی آدرس را در قالب یک پارامتر بخوانید.

3️⃣ به عنوان پسوند صفحه از پسوندهای گمراه کنند مانند ‎.zip و ‎.pdf و استفاده نکنید. Web Browser ها توجهی به پسوند آدرس شما ندارند و برای شان Mime Type پاسخ سایت مهم است، اما مخاطبان سایت شما انسان هستند و وقتی لینکی را می بینند که پسوند آن ‎.pdf است توقع دارند با کلیک بر روی آن یک فایل PDF برای شان باز شود.

4️⃣ سعی کنید در ترکیب URL های تان سلسله مراتب یک صفحه را القا کنید. به عنوان مثال مخاطب سایت شما با نگاه کردن به URL ای مانند ‎/Products/Menswear/Shirts/Red می تواند درک کند این آدرس مربوط به کالایی از گروه لباس های مردانه، پیراهن و با رنگ قرمز است.

5️⃣ سعی کنید آدرس شما حساس به حروف بزرگ و کوچک نباشد، چرا که ممکن است کسی بخواهد آدرس صفحه شما را از روی یک کاغذ پرینت شده خوانده و در Browser تایپ کند. سیستم Routing در ASP.NET Core نیز به حروف بزرگ و کوچک حساس نیست.

6️⃣ از بکار بردن علائم و ترتیب کاراکترها در URL خودداری کنید. اگر نیاز دارید در آدرس تان فاصله بیاندازید بجای فاصله از کاراکتر dash (همان -) استفاده کنید (مثال: ‎/my-great-article). استفاده از کاراکتر Underscore (یا _) پسندیده نیست. همچنین استفاده از فاصله های URL Encoded آزار دهنده است (مثلا ‎/my+great+article یا ‎/my%20great%20article آدرس جالبی محسوب نمی شود).

7️⃣ آدرس های URL تان را عوض نکنید. URL هایی که کار نمی کنند به منزله یک بیزنس شکست خورده هستند. اگر بنا بر هر دلیلی نیاز به عوض کردن URL هایتان دارید با افزودن پشتیبانی URL های قدیمی تان و هدایت آن ها به آدرس جدید از افت رتبه Seo تان جلوگیری کنید.

8️⃣ سعی کنید الگوی URL ها در تمام برنامه تان شکل مشابهی داشته باشد.

🔗 جِیکوب نیِلسِن توصیه هایی مشابه موارد فوق را در صفحه اش بیان کرده است:
https://www.nngroup.com/articles/url-as-ui

🔗 آقای تیم بِرنِرز لی (خالق وب) نیز توصیه های مشابهی دارد:
https://www.w3.org/Provider/Style/URI

با تقدیم احترام
#مهدی_کرامتی
@barnamenevis_org
Forwarded from TondTech
‏اگر قصد مهاجرت دارید، اگر می خواید کار جدیدی رو شروع کنید که خارج از نقطه امن شماست، بدانید و آگاه باشید که وارد ناحیه ترس می شوید، جایی که اعتماد به نفس ندارید، تحت تاثیر عقاید دیگران هستید ولی خبر خوب اینکه اگر از این مرحله رد شدید، وارد مرحله یادگیری و سپس رشد می شوید.
#تندتک
@tondTech
بهترین کامپوننت‌های UI برای Angular در سال 2019

✔️ Angular Material (Official library)
✔️ Onsen UI
✔️ NG Bootstrap
✔️ NGX Bootstrap
✔️ NG-Lightning
✔️ Clarity
✔️ Vaadin Components
✔️ PrimeNG
✔️ MDBootstrap
✔️ Teradata Covalent UI Platform
✔️ Amexio
✔️ DevExtreme
✔️ Wijmo
✔️ jQwidgets
✔️ Kendo UI
منابع :
https://hackernoon.com/top-8-angular-component-libraries-you-should-know-in-2019-68fcfdc6a093
https://www.ngdevelop.tech/best-angular-ui-component-libraries/
_______________
@IranAspMvc
🔰 #آیا_میدانستید
توی کنسول مروگر میتونین با دستور console.table، آرایه ها و لیست ها تون رو به صورت جدولی نشون بدین؟

var exampleArray = [
"First item in the array",
"I'm the second item in this array",
"Obviously i'm the last item"
];
console.table(exampleArray);

مثال های بیشتر:
https://www.telerik.com/blogs/better-visualization-of-console-data-with-tables
__________
@IranAspMvc
Forwarded from Ref.Codes (Meysam Khoshbakht)
Media is too big
VIEW IN TELEGRAM
انتظارات مشتری در مقابل بودجه ی مشتری 😂

@refcodes
کنفرانس Microsoft Build شروع شد

از لینک های زیر میتونین به صورت زنده مشاهده کنین
https://mybuild.techcommunity.microsoft.com/home#top-anchor

اگه مشکلی با فیلترینگ ندارید، یوتیوب زیرنویس بهتری ارائه میده
https://www.youtube.com/watch?v=ZbpjLchrYgw

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

متاسفانه قسمت جدید GOT هم منتشر شده و باید قید Build رو بزنیم 😅
______________
@IranAspMvc
Forwarded from کدهک
مایکروسافت اعلام کرد نسخه ی بعدی دات نت ورژن 5 خواهد که در سال 2020 منتشر میشود.

این نسخه ی به صورت یکپارچه شامل NET Core و Mono می شود و قرار است برنامه نویسی WPF و Windows Form را شامل شود.

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

دات نت 5 در ادامه ی دات نت کور بوده و به صورت متن باز توسعه داده خواهد شد.
معرفی Windows Terminal

مایکروسافت در روز اول کنفرانس Build 2019 از برنامه ای به نام Windows Terminal پرده برداری کرد.
این برنامه، یک ترمینال مرکزی برای دسترسی به PowerShell و Cmd و WSL (کرنل Linux در Windows) است.

این برنامه گرافیک بهتری دارد و دارای قابلیت Multiple Tab - Theming and Styling - Emoji and GPU text-rendering - Syntax Highlight می باشد.

ویدیوی دموی برنامه (حتما ببینین) :
https://aka.ms/terminal-video

اطلاعات بیشتر :
https://devblogs.microsoft.com/commandline/introducing-windows-terminal/
مخزن پروژه در گیتهاب :
https://github.com/Microsoft/Terminal
_______________
@IranAspMvc
Forwarded from اِسکیلی Skilly (مهدی کرامتی)
معرفی ورژن 2 Windows Subsystem for Linux (به اختصار WSL 2)

ماکروسافت در یک اقدام جالب، کرنل لینوکس (ورژن 4.19 - آخرین ورژن پایدار و LTS) رو به طور کامل به ویندوز منتقل کرد.

در نتیجه امکان اجرای کانتینر های Docker به صورت Native در آن وجود دارد و دیگر نیازی به VM برای اجرای کانتینر ها بر روی Windows نیست!

همچنین ماکروسافت ادعا کرده در این روش، زمان boot time لینوکس و میزان رم مصرفی کاهش پیدا کرده و نیز عملیات I/O filesystem افزایش پرفرمنس داشته است.

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

این قابلیت، اواخر امسال همراه با اپدیت ویندوز 10 به نام (Codename 19H2) عرضه خواهد شد.
اطلاعات بیشتر :
https://devblogs.microsoft.com/commandline/shipping-a-linux-kernel-with-windows

@barnamenevis_org
Forwarded from کدهک
آنچه باید درباره NET 5. بدانید

https://tinyurl.com/cdhks-net5
🔰 بررسی تغییرات جدید NET Core 3.0 Preview 5

توی این نسخه که همزمان با کنفرانس Microsoft Build 2019 منتشر شد شاهد تغییرات کم ولی مهمی هستیم.

🔸بهبود های WPF و Windows Forms
توی این نسخه پرفرمنس Startup (اجرای اولیه) این دو تکنولوژی به لطف قابلیتی به نام AOT Compilation افزایش پیدا کرده

ما 2 روش کامپایل داریم:
یکی حالت معمولی که کد رو به یک زبان میانی (توی دات نت بهش IL یا CIL هم میگن) کامپایل میکنه، در واقع DLL های خروجی پروژه ها شامل کد های IL یا همون Intermediate Language هستند و توسط Just-In-Time (به اختصار JIT) اجرا میشن

روش دوم که پرفرمنس خیلی بیشتری داره اسمش هست Ahead-Of-Time (یا به اختصار AOT) که کد ها رو نه به یک زبان میانی، بلکه مستقیما به کد ماشین (Native) تبدیل میکنه
در این روش کد ها مستقیما بر روی سیستم عامل اجرا میشن و شامل کد های Optimize شده برای همون سیستم عامل هستند

حالا یه چیز جدیدی به نام Runtime دیگه برای NET Core هم هست به نام CoreRT که برای همین AOT Compilation کاربرد داره و دیگه نهایت سرعته و قراره به عنوان بخشی از NET 5. منتشر بشه. [بعدا در موردش صحبت خواهیم کرد]

🔹بهبود های کلاس SqlClient
این کلاس، جز کلاس های پایه ADO.NET هست و کارش دسترسی به دیتابیس SQL Server هست و توی ORM ها از جمله EF/EF Core و Dapper هم از همین کلاس استفاده شده

این کلاس جز کلاس های پایه NET Framework و Core بوده (داخل اسمبلی System.Data.dll) و به صورت Package جدا گانه نیست به همین خاطر هر موقع فیچر های جدیدی بهش اضافه میشد باید صبر میکردیم تا آپدیت جدید دات نت بیاد تا بتونیم ازش استفاده کنیم

ولی الان ماکروسافت اون رو به یه پکیج جداگانه به نام Microsoft.Data.SqlClient منتقل کرده تا بتونه سریع تر براش آپدیت بده. همین الان بهبود هایی بهش اضافه شده و قراره در کنار توسعه دات نت کور، این پکیچ هم توسعه و بهبود داده بشه

کلاس قبلی (System.Data.SqlClient) قرار نیست حذف بشه و بروزرسانی های مهم رو دریافت خواهد کرد پس نگران تغییر نباشید ولی برای استفاده از کلاس جدید :
اگه از این کلاس به صورت مستقم (به روش ADO.NET) استفاده کردید به راحتی با نصب این پکیج و تغییر به namespace مورد نظر میتونین ازش استفاده کنین ولی اگه از ORM هایی مثل EF Core یا Dapper استفاده میکنین باید صبر کنین تا این ORM ها هم از این پکیج جدید استفاده کنن

🔸پابلیش تک فایلی یا (Single EXEs)
از این پس میتونین خروجی پروژه هاتون رو به صورت یک فایل تکی پابلیش بگیرید. دیگه لازم نیست کلی فایل رو توی سیستم مشتری کپی کنین
این فایل به صورت self-extracting خواهد بود و تمام DLL ها و فایل های مورد نیازش (Dependencies) رو داخل خودش Embed کرده و موقع اجرا، فایل ها رو تو یه مسیر Temp کپی میکنه و Load شون میکنه

🔹بهبود های JSON Serializer
قبلا در مورد JSON Serializer داخلی فوق سریع توی NET Core 3.0 Preview 2 صحبت کردیم. اینبار اما یه سری بهبود و تغییرات دیزاینی تو پیاده سازیش داشته که خیلی کاربردی نیست پس ازش میگذریم [اطلاعات بیشتر]

🔸تغییرات Index و Range
توی سی شارپ 8 شاهد قابلیت جدید و باحالی به نام index و range بودیم که توی NET Core 3 هم کم کم پیاده سازی شد ولی الان ماکروسافت تصمیم گرفته بر اساس فیدبک های کامیونتی یه سری تغییر در این رابطه انجام بده
این تغییرات و مثال هاش کمی طولانیه و اینجا جا نمیشه. [اطلاعات بیشتر]

🔹تغییرات دیگه ای هم بوده که زیاد مهم نیستند یا خیلی تخصصی اند
اطلاعات بیشتر :
https://devblogs.microsoft.com/dotnet/announcing-net-core-3-0-preview-5/
_______________
@IranAspMvc
معرفی ML.NET 1.0

🔸همزمان با کنفرانس Microsoft Build نسخه 1.0 ML.NET منتشر شد. ML.NET فریمورک سورس باز و کراس پلتفرم برای یادگیری ماشین مخصوص دات نت هست.

🔹توسط ML.NET میتونین به زبان های C# و F# برای سناریو های مختلفی از جمله تجزیه و تحلیل احساسات، طبقه بندی متون، تشخیص آنومالی (ناهنجاری)، پیش بینی و تخمین، سیستم های توصیه گر (recommendations) و... برنامه های مدل سازی یادگیری ماشین چند سکویی (قابل اجرا بر روی Linux, Mac و Windows) ایجاد کنید.
مثال های کار با ML.NET رو میتونین در ریپازیتوری زیر مشاهده کنین
https://github.com/dotnet/machinelearning-samples

🔸این فریمورک توسط واحد تحقیقاتی ماکروسافت توسعه داده شده و هم اکنون در برنامه های مختلفی از جمله Windows ،Azure ،Bing, Office, PowerBI و نیز سازمان های مختلفی داره استفاده میشه

🔹همچنین قابلیت انعطاف پذیری و گسترش پذیری بالایی داشته و ازفریمورک های مطرح دیگه مانند TensorFlow و Accord.Net و ONNX (فرمت مدل های یادگیری عمیق) پشتیبانی میکنه

🔸از مزایای این فریمورک میتوان به موارد زیر اشاره کرد
- قابلیت AutoML : که وظیفه آن انتخاب هوشمند الگوریتم و ساده/هوشمند سازی فرایند مدل سازی هست
- ابزار Model Builder : یک ابزار UI برای ساخت مدل های ML توسط AutoML
- ابزار ML.NET CLI : یک ابزار command line برای کار با ML.NET و AutoML

اطلاعات بیشتر :
https://devblogs.microsoft.com/dotnet/announcing-ml-net-1-0/

https://devblogs.microsoft.com/cesardelatorre/what-is-ml-net-1-0-machine-learning-for-net/
_______________
@IranAspMvc
❇️ ساخت برنامه های ویندوزی توسط React Native

🔸ماکروسافت در یک اقدام جالب، پروژه ای به نام "React Native for Windows" ایجاد کرده که توسط آن میتوان با React Native برنامه های UWP با پرفرمنس بالا برای Windows 10 ساخت

🔹در نسخه فعلی (current)، کامپیوننت های ویندوز با زبان سی شارپ برای استفاده در React Native نوشته شده اند ولی در نسخه جدید (vnext)، ماکروسافت بسیاری از کامپوننت های ویندوز را به زبان C++ برای React Native در جهت افزایش پرفرمنس باز نویسی کرده

🔸برنامه های ساخته شده با این تکنولوژی، همانند UWP توانایی اجرا بر روی تمامی دیوایس هایی که از ویندوز 10 پشتیبانی میکنند را دارد مانند HoloLens, Xbox, PC
و...

ریپازیتوری گیتهاب :
https://github.com/Microsoft/react-native-windows
_______________
@IranAspMvc
❇️ ویژوال استودیو آنلاین شد!

در کنفرانس بیلد، مایکروسافت از پیش‌نمایش یک Code Editor آنلاین خبر داد که Visual Studio Online نام دارد
این ویرایشگر بر پایه VS Code بوده و از تمام افزونه های VS Code و نیز InteliCode (قابلیت IntelliSense با توانایی هوش مصنوعی برای کمک به کد نویسی) پیشتیبانی میکنه
البته قرار نیست این این ویرایشگر، به محیط اصلی کد نویسی شما تبدیل بشه بلکه هدفش فقط یک ابزار کمکی برای مرور کد ها و Pull Request ها و نیز Live Share (کد نویسی اشتراکی) در وب هستش

اگه اسم Visual Studio آنلاین براتون آشناس به خاطر اینه که قبلا به TFS انلاین یا همون VSTS، این اسم رو میگفتن ولی یک سال قبل اسمش به Azure DevOps تغییر پیدا کرد.

ضمنا پروژه مشابهی به نام code-server وجود داره که VS Code رو به صورت Remote روی یک سرور اجرا میکنه و با مرورگر میشه بهش دسترسی داشت

در آینده میتونین توسط ادرس زیر از Visual Stuido Online استفاده کنین
https://online.visualstudio.com/
_______________
@IranAspMvc
🔰 اخبار جدید مایکروسافت در مورد مرورگر Edge

مروگر جدید Edge که به جای IE، برپایه Chromium توسعه داده شده کراس پلتفرم بوده و هم اکنون در Android و IOS هم قابل استفاده است

ماکروسافت در کنفرانس بیلد به معرفی فیچر های جدید این مروگر پرداخت از جمله :

قابلیت IE Mode :
توسط این قابلیت میتوان سایت ها و اپ های قدیمی که با مروگر های مدرن سازگاری ندارند را توسط موتور رندرینگ Internet Explorer لود کرد.

قابلیت جمع آوری و آرشیو محتوا
توسط این قابلیت میتوان متن ها و عکس های مفید سایت ها را جمع آوری کرده برای خود آرشیو کنید. میتوانید آن را با دوستانتان به اشتراک بگذارید و یا به صورت Excel یا Word خروجی بگیرید

ماکروسافت اعلام کرده که هم اکنون بر روی افزایش حریم خصوصی و جلوگیری از روش های Web Tracking (ردیابی فعالیت افراد در وب) تمرکز کرده و قراره حالتی به نام "Strict" رو به Edge اضافه کنه که هم جلوی تبلیغات مزاحم در سطح وب رو میگیره و هم بدافزار ها و Web Tracker ها رو مسدود میکنه
@IranAspMvc
Forwarded from Software Philosophy
با ایجاد هر تکنولوژی در دنیای نرم افزار ، انبوهی از قابلیت‌های جدید ایجاد می‌شود که به توسعه دهندگان این امکان را می‌دهند تا برنامه‌هایی با قابلیت‌های بالا و کد کمتر ایجاد کنند . در لینک زیر 20 کتابخانه مبتنی بر .netcore معرفی شده است که هر برنامه نویسی ممکن است به آنها نیاز داشته باشد.

https://codinginfinite.com/best-top-dot-net-core-useful-libraries-open-source/

#شهریار_انتظام (https://ow.ly/qDN430nPiCg)

کانال تلگرام:
@SoftwarePhilosophy

___
Forwarded from Moien Tajik 💭
زمان مبحث خیلی بزرگ و پیچیده ای هست و اکثر ما تو ساخت بیشتر برنامه ها جوانب مختلفش رو نمیبینیم.

مواردی مثل UTC و Unix TIme و Offset و Leap و خیلی چیزای دیگه رو بدرستی نمیشناسیم.

فرق Instant و Duration و Interval و Period رو درست نمیدونیم. 🤷🏻‍♂️

بدون توجه به دونستن بعضی از این موارد میایم تاریخ هارو ذخیره میکنیم ، به هم تبدیل میکنم ، بهشون زمان های دیگه رو اضافه و کم میکنیم ; در حالی که همین کارهای بنظر ساده میتونن مشکل ساز بشن. ⚠️

بعنوان مثال اینکه اول به یک تاریخ ،ابتدا 3 روز و بعد 1 ماه اضافه کنیم و اینکه به همون تاریخ ، اول 1 ماه و بعد 3 روز اضافه کنیم باعث بوجود آمدن 2 تاریخ متفاوت میشه و نتایج یکسان نیست.

نمونه مثال در #C :

using NodaTime;

var start = new LocalDateTime(2017, 1, 27, 9, 0, 0);

var end1 = start + (Period.FromDays(3) + Period.FromMonths(1));

var end2 = (start + Period.FromDays(3)) + Period.FromMonths(1);

〰️〰️〰️

وقتی میگیم 1 ماه ، منظورمون 31 روز ، 30 روز یا 29 روزه ؟ سال های کبیسه تو تاریخ ها چطور محاسبه میشن ؟ جلو و عقب رفتن ساعت تو 6 ماه اول و دوم اونم فقط تو بعضی کشورها چطور حساب میشه ⁉️

این ها همه مباحثی هستن که موقع کار با زمان باید در نظر گرفته بشه. Reference های زیادی برای یادگیری این موارد هست و Library های زیادی مخصوص هر زبان براشون نوشته شده.

دوتا از این Reference ها رو میزارم که بهترینش کنفرانس Jon Skeet هست : kutt.it/time


و رفرنس بعدی ، این سوال در Stackoverflow هست که جواب های زیاد و کاملی از افراد مختلف گرفته :

https://stackoverflow.com/q/2532729/6661314
#یک_نکته

ترجیحا متد های async را به روش sync و توسط Task.Wait و Task.Result فراخوانی نکنید زیرا باید block شدن ترد جاری شده و حتی میتواند باعث dead-lock شود.

ولی اگر جایی مجبور شدید به این صورت استفاده کنید (مثلا در سازنده کلاس زیرا نمی توان async/await استفاده کرد) به جای
task.Wait();
var result = task.Result;
حتما حتما از روش زیر استفاده کنید
var result = task.GetAwaiter().GetResult();

این روش دقیقا مانند روش اول است حتی بحث dead-lock و blocking ترد هم صادق است ولی ...
در روش اول اگر خطایی رخ دهد استثنای صادر شده را در یک AggregateException محصور شده پرتاب میکند که بررسی Detail آن سخت تر و نامفهوم تر است ولی در روش دوم اگر خطایی رخ دهد یک Exception معمولی پرتاب میشود

منابع :
https://codurance.com/2018/12/06/wait-and-getawaiter/
https://stackoverflow.com/questions/17284517
_______________
@IranAspMvc
🔰 معرفی Deno.js (شاید جایگزین Nodejs !)

سال قبل در کنفرانس JSConf 2018 خالق Nodejs از ساخت آن اظهار پشیمانی کرد و در مورد تعدادی از مشکلات آن ارائه داشت
https://www.youtube.com/watch?reload=9&v=M3BM9TB-8yA

سپس ماه قبل در کنفرانس JS Fest 2019، محصول جدیدی به نام Deno.js را ارائه کرد که مشابه Nodejs یک Runtime جاوااسکریپت بر فراز موتور V8 کروم است ولی با زبان های Rust و TypeScript نوشته شده‌است.
https://github.com/denoland/deno
https://deno.land/
_______________
@IranAspMvc
❇️ عیب یابی و رفع مشکلات پرفرمنسی

در یکی از شرکت هایی که مشاور هستم از من خواسته شده تا مشکلات پرفرمنسی پروژه را پیدا کرده و مناسب ترین راه حل را به آنها پیشنهاد دهم

در هر پروژه ای احتمالا قسمت های زیادی قابل بهبود هستند (چه از لحاظ پرفرمنسی و چه از لحاظ معماری و کدنویسی تمیز و...) اما برای یافتن موثر ترین راه و البته کم هزینه ترین، باید ابتدا Bottleneck (گلوگاه) های سیستم را کشف کرده و سپس بر اساس «هزینه، زمان و منفعت» آنها را الویت بندی کنیم

برای کشف گلوگاه های سیستم (جاهایی که عامل اصلی افت پرفرمنس هستند) باید از ابزار های Profiler استفاده کنیم.
در کل پروفایلر های مختلفی وجود دارند که اکثرا پولی هستند در اینجا میخواهم بهترین آنها رو معرفی کنم

بهترین ابزار های Performance Profiler

1️⃣ برنامه ANTS Performance Profiler (محصول شرکت Redgate)
2️⃣ برنامه dotTrace (محصول شرکت JetBrains)
3️⃣ برنامه PerfView (محصولی "رایگان و سورس باز" از شرکت Microsoft)
4️⃣ برنامه CodeTrack (محصولی "رایگان و سورس باز")

هر چهار برنامه قابلیت های قوی و زیادی دارند از مهمترین شون میشه به موارد زیر اشاره کرد

🔸 قابلیت ثبت سلسله مراتب فراخوانی متد ها
توسط این قابلیت که اصلاحا بهش Call tree میگن میشه فهمید که چه متدی چه متد های دیگه ای رو فراخوانی کرده یا مثلا یک متد کلا چندبار صدا زده شده و هر متد چقدر به طول انجامیده (در قالب یک Timeline کامل) و ....

🔹 قابلیت ثبت تمام کوئری های اجرا شده بر روی دیتابیس
توسط این قابلیت میشه دید چه کوئری هایی و مثلا یک کوئری چندبار روی دیتابیس اجرا شده و هرکدوم چقدر زمان بره و...

🔸 قابلیت ثبت تمام Exception های رخ داده به همراه جزئیات و stacktrace

🔹 قابلیت نمایش تمام Thread های ایجاد شده و فرایند های انجام شده داخلش هر کدومشون و یا کلیه فرایند های انجام شده داخل یک Process

🔸 قابلیت پروفایل کردن همه برنامه ها از جمله
.NET Framework, .NET Core و ASP.NET, ASP.NET Core, Webservices, WCF, Windows Forms, Windows services, WPF ,IIS Website, IIS Express Website, Attach to a running process


❇️ این قابلیت ها برای عیب یابی به شدت مفید هستند چون توی یه سیستم با تراکنش بالا که بعضی مشکلات رو نمیشه پیش بینی کرد با این به راحتی میشه متد ها و یا کوئری های سنگین و اضافه ای که باعث افت پرفرمنس میشه رو پیدا کرد

❇️ هر دو برنامه ANTS و dotTrace پولی بوده و جز بهترین و محبوبترین برنامه های Performance Profiler هستند.
برنامه dotTrace یکپارچگی خوبی با Resharper داره و Visual Studio داره ولی شخصا با توجه به تجربه کاری با جفتشون، برنامه ANTS رو بیشتر می پسندم؛ کارکردن باهاش راحته و UX خوبی داره گزارشات و خروجی کاربردی تری نشون میده
ANTS Performance Profiler overview (ویدئو دمو برنامه)
https://www.youtube.com/watch?v=8mhC-Ji6-uU

❇️ برنامه PerfView هم تقریبا همین قابلیت ها رو داره ولی کارکردن باهاش سخت تره و UX خوبی نداره ولی چون رایگانه محبوبه
برنامه CodeTrack هم قابلیت هاش (نسبت به قبلی ها) کمتره ولی کارکردن باهاش راحته و UX متوسطی داره ونیز رایگانه

❇️ یه قابلیت خوبی که فقط dotTrace داره قابلیت Remote Profiling هست که توسط اون میتونین به برنامه هاتون روی یه سرور Remote دیگه متصل بشین و پرفایلش کنین

🔰در ادامه تصمیم دارم یه سری از مشکلات مهمی که توی اون پروژه مذکور پیدا و رفع میکنم رو با هشتگ زیر منتشر کنم
#PerformanceTuning
______________
@IranAspMvc