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

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

لینک گروه ASPNET Core:
https://news.1rj.ru/str/+ufG25x7lVFgyYTNk
Download Telegram
کنفرانس 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/

#شهریار_انتظام (http://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
❇️ خواهشا از HttpClient درست استفاده کنیم! (قسمت اول)
#PerformanceTuning

کلاس HttpClient محبوب ترین کلاس برای ارتباطات Http است ولی متاسفانه اکثرا از آن بدستی استفاده نمیکنند!
در این پست میخواهیم Best Practice های آن را بررسی کنیم.

در دات نت، 3 کلاس پایه برای ارتباطات Http داریم :

1️⃣ کلاس HttpWebRequest : اولین و low-level ترین کلاس که کنترل بیشتری به شما می دهد

2️⃣ کلاس WebClient : یک محصور کننده hight-level بر روی HttpWebRequest که کنترل کمتری به شما می دهد ولی طرز استفاده آن ساده تر است

3️⃣ کلاس HttpClient : بهینه ترین کلاس موجود برای ارتباطات Http که مزایای هر دو کلاس قبل را داشته و در دات نت 4.5 به بعد (و نیز تمامی ورژن های NETCore) اضافه شد (البته پکیج Nuget آن برای دات نت 4.0 هم وجود دارد)

کلاس HttpClient نسبت به دو کلاس قبلی پرفرمنس بیشتری داشته و متد های اصلی آن (از جمله GetAsync و PostAsync و...) thread-safe است درنتیجه میتوان یک نسخه از آن به صورت Singleton ایجاد و به صورت concurrent استفاده شود.

یک قابلیت مهم دیگر این آن، امکان Chain کردن HttpMessageHandlers ها در HttpClient است (چیزی شبیه به Pipeline میدلور ها در ASP Core) که میتوان از آن برای Logging، Caching و Error handling و ... استفاده کرد (مثال)

4️⃣ کتابخانه RestSharp نیز یک کتابخانه third-party برای ارتباطات Http و مخصوصا REST بوده ولی درون خود از HttpWebRequest استفاده میکند نه HttpClient و پرفرمنس کمتری دارد (نزدیک به نصف!)

5️⃣ کتابخانه Refit هم هست که با قابلیت های مدرن زیادی داره و کار با RESTful API ها رو خیلی راحت میکنه و البته از HttpClient هم استفاده میکنه (در حال حاضر بهترین کتابخانه third-party)

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

🔸کلاس HttpClient نباید هربار و به ازای هر درخواست، ساخته (new) شود که در این صورت پرفرمنس را به شدت کاهش میدهد!

🔹با وجود اینکه استفاده از یک شی Singleton آن نسبت به ایجاد هر باره آن بهتر است ولی باز هم صحیح نیست و باعث میشود از تغییرات DNS آگاه نشود!

🔸قبلا گفتیم که فقط متد های اصلی آن thread-safe است، پس پروپرتی های آن مانند (DefaultRequestHeaders و BaseAddress و Timeout و ...) thread-safe نیست و نباید بین ترد های مختلف به صورت مشترک استفاده شود
مثلا اگر یک شی Singleton یا static از HttpClient داشته باشید و در میان ترد های مختلف از آن استفاده کنید ممکن است در آن واحد که یک ترد در حال درخواست زدن به یک url است، ترد دیگری BaseAddress آن را تغییر دهد

🔹با وجود اینکه کلاس کلاس HttpClient یک شی Disposable است ولی نباید به صورت دستی Dispose شود درنتیجه استفاده از آن در کنار using (برای Dispose خودکار) به شدت اشتباه است و باعث مشکل حادی را به نام sockets exhaustion (اشباع سوکت های باز) میشود.

🔸نکته قبل، برای خروجی متد های آن، یعنی کلاس HttpResponseMessage صادق نیست و آن هارا باید حتما توسط using یا به صورت دستی Dispose کرد (البته در حالت دستی اگر exception ایی رخ دهد Dispose رخ نخواهد داد پس باید در بلاک try finaly نوشته شود)

🔹نکته بسیار مهم دیگر این است که به هیچ عنوان از کلاس HttpClient به صورت sync استفاده نکنید، ارتباطات network یکی از مهمترین عوامل block کننده thread بوده و دلیل اصلی اینکه کلاس HttpClient فقط و فقط دارای متد های async است همین بوده.
در نتیجه، استفاده از متد های آن به صورت sync همراه با Task.Wait و Task.Result به شدت اشتباه است و باعث بلاک شدن ترد می شود. (این مقوله برای تمامی متد های async صادق است و حتی می تواند باعث dead-lock شود)

در قسمت بعد اصولی ترین و بهینه ترین روش کار با HttpClient را بررسی خواهیم کرد
___________
@IranAspMvc
❇️ خواهشا از HttpClient درست استفاده کنیم! (قسمت دوم)
#PerformanceTuning

در قسمت قبل روش های کار با Http و مزایا و معایب هرکدام را بررسی کردیم و به نکات و Best Practice های استفاده از HttpClient پرداختیم
در این قسمت میخواهیم بهترین روش استفاده از آن را بررسی کنیم

اصولی ترین و بهینه ترین حالت استفاده از HttpClient، استفاده از کلاس HttpClientFactory موجود در NET Core 2.1. به بعد است

این کلاس وهله سازی HttpClient و Dispose کردن آن را به صورت خودکار و استاندارد به عهده میگیرد و توسط مکانیزم Pooling (استخری از HttpClient ها) وهله های ایجاد شده را مجددا برای درخواست های بعدی استفاده می کند

بدین ترتیب HttpClientFactory از HttpClient های خود، به بهینه ترین نحو استفاده‌ی مجدد می‌کند و همچنین سربار ایجاد HttpClient‌های جدید نیز به حداقل می‌رسند.

در این روش دیگر مشکل نشتی حافظه یا کمبود منابع ناشی از Dispose نشدن HttpClient ها را نخواهیم داشت زیرا Lifetime وهله ها توسط HttpClientFactory مدیریت می شود
همچنین دیگر مشکل sockets exhaustion (اشباع سوکت های باز) و آگاه نشدن از تغییرات DNS را نخواهیم داشت

برای استفاده از این کلاس 4 روش موجود است
Basic usage
Named clients
Typed clients
Generated clients

روش Basic روش ساده و معمول آن است ولی معمولا در پروژه ها لازم است یک سری کانفیگ خاص را برای هر HttpClient تنظیم کنیم
مثلا HttpClient ایی که قرار است به سایت A درخواست بزند BaseAddress و Timeout و DefaultRequestHeaders (هدرهای پیشفرض) خود را دارد

از انجایی که این پروپرتی ها thread-safe نیستند بهترین راه استفاده از روش های Named clients و Typed clients است
نکته و محدودیت ای که در ورش Typed clients وجود دارد اینست که کلاس استفاده کننده از آن HttpClient الزاما به صورت Transient رجیستر میشود که باید مد نظر داشت و در صورت نیاز از روش Named clients یا ترفند های دیگر استفاده کرد.

روش Generated clients هم مخصوص استفاده از HttpClient توسط کتابخانه های third-party مانند Refit (که در قسمت قبل بررسی کردیم) است

برای یادگرفتن روش صحیح استفاده از HttpClient پیشنهاد میکنم حتما این 3 مقاله را بخوانید
https://www.dotnettips.info/post/2801
https://www.dotnettips.info/post/3022

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests?view=aspnetcore-2.2
___________
@IranAspMvc
هک برنامه های دات نتی با dnSpy و de4dot

برای هک و کرک یک برنامه دات نتی به ترتیب به 4 مرحله زیر نیاز داریم :

1️⃣ مرحله Deobfuscate & Unpack
در این مرحله اگر برنامه مورد نظر، Obfuscate (ناخوانا کردن کد ها) یا Pack شده باشد ابتدا لازم است که آنرا Deobfuscate کنید

2️⃣ مرحله Decompile
برنامه های دات نتی چون به زبان IL کامپایل میشه امکان برگرداندنشون به کد قابل فهم #C توسط ابراز های Decompiler وجود دارد

3️⃣ مرحله Assembly Debugging
در این مرحله میتوانید مشابه Visual Studio برنامه را Debug کرده، توسط break-point خط به خط کد ها را در زمان اجرا بررسی کنید، متغیر ها و مقادیرشون رو ببینید و قسمتی از کد که لازم است تغییر کد را پیدا کنید

4️⃣ مرحله Assembly Editing
نهایتا در این مرحله باید کد مورد نظر را ویرایش کرده و سر جای خود ذخیره و کامپایل کنید

🔰 معرفی بهترین ابزار های این کار :

🔸برنامه de4dot بهترین و قویترین برنامه برای Deobfuscate است که سورس باز و رایگان بوده و در حال حاضر 19 روش Obfuscate را شناسایی و خنثی میکند
طرز کار با آن ساده بوده و توسط command line است ولی اگر میخواهید به اندازه یک راست کلیک روی برنامه و انتخاب گزینه "Deobfuscate with de4dot" ساده شود میتوانید آن از de4dot Installer برای نصب آن استفاده کنید

🔹 برنامه dnSpy بهترین و قوی ترین برنامه Decompile و Assembly Debug/Edit است که سورس باز و رایگان بوده و انواع مختلف NET Framework, NET Core, Unity و ... را متواند Decompile کند هم چنین توانایی Debugging و Editing در سطح #C و Visual Basic و مهم تر از همه IL را دارد که در نوع خود بی نظیر است

🔸 بعد از dnSpy برنامه ی DotPeek (از شرکت JetBrains) بهترین برنامه Decompiler هست که از مهم ترین قابلیت آن میتوان به برگرداندن یک DLL به یک پروژه Visual Studio ایی اشاره کرد

🔹 ویدئو آموزش هک برنامه دات نتی توسط dnSpy
https://www.youtube.com/watch?v=YLmeFJNm0Bc
_______________
@IranAspMvc
🔸ماکروسافت، قابلیت جدیدی به نام "Used By" را به ریپازیتوری های NET. در Github اضافه کرد.

🔹توسط این قابلیت میتوان دید که یک پکیج Nuget، توسط چه ریپازیتوری هایی استفاده شده است
@IranAspMvc