Today, we’re releasing .NET 5.0 Preview 2. It contains a set of smaller features and performance improvements. We’re continuing to work on the bigger features that will define the 5.0 release, some of which are starting to show up as initial designs at dotnet/designs.
ASP.NET Core 2.2.0-preview1 منتشر شد
What’s new in 2.2
We’re publishing a series of posts here that go over some of the new feature areas in detail. We’ll update the post with links to these posts as they go live over the coming days:
- API Controller Conventions
- Endpoint Routing
- Health Checks
- HTTP/2 in Kestrel
- Improvements to IIS hosting
- SignalR Java client
معرفی فریمورک FAST مایکروسافت
What is FAST?
FAST is a collection of technologies built on Web Components and modern Web Standards, designed to help you efficiently tackle some of the most common challenges in website and application design and development.
What are Web Components?
"Web Components" is an umbrella term that refers to a collection of web standards focused on enabling the creation of custom HTML elements. Some of the standards that are under the umbrella include the ability to define new HTML tags, plug into a standard component lifecycle, encapsulate HTML rendering and CSS, parameterize CSS, skin components, and more. Each of these platform features is defined by the W3C and has shipped in every major browser today.
Span در C# 7.2
نوعهای جدید <Span<T و <ReadOnlySpan<T در C# 7.2
نوعهای جدید <Span<T و <ReadOnlySpan<T جهت ارائهی ناحیههای اختیاری پیوستهای از حافظه، شبیه به آرایهها تدارک دیده شدهاند و هدف استفادهی از آنها، تولید برنامههای سمت سرور با کارآیی بالا است.
برای کار با این نوعها، هم نیاز به کامپایلر C# 7.2 است و هم نصب بستهی نیوگت System.Memory:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp2.0</TargetFramework> <LangVersion>latest</LangVersion> </PropertyGroup> <ItemGroup> <PackageReference Include="System.Memory" Version="4.4.0-preview1-25305-02" /> </ItemGroup> </Project>
Spanها و امکان دسترسی به انواع حافظه
Spanها میتوانند به حافظهی مدیریت شده، حافظهی بومی (native) و حافظهی اختصاص داده شدهی در Stack اشاره کنند. به عبارتی Spanها یک لایه انتزاعی، برفراز تمام انواع و اقسام حافظههایی هستند که میتوانند در اختیار توسعه دهندگان NET. باشند.
- البته اکثر توسعه دهندگان دات نت از حافظهی مدیریت شده استفاده میکنند. برای مثال Stack memory تنها از طریق کدهای unsafe و واژهی کلیدی stackalloc قابل تخصیص است. این نوع حافظه بسیار سریع است و همچنین بسیار کوچک؛ کمتر از یک مگابایت که به خوبی در CPU cache جا میشود. اما اگر در این بین حجم حافظهی تخصیصی بیشتر از یک مگابایت شود، بلافاصله استثنای StackOverflowException غیرقابل مدیریتی را به همراه خاتمهی فوری برنامه به همراه خواهد داشت. برای نمونه از این نوع حافظه در جهت مدیریت رخدادهای داخلی corefx زیاد استفاده میشود.
- حافظهی مدیریت شده، همان حافظهای است که توسط واژهی کلیدی new در برنامه، جهت ایجاد اشیاء، تخصیص داده میشود و طول عمر آن تحت مدیریت GC است.
- حافظهی مدیریت نشده یا بومی از دید GC مخفی است و توسط متدهایی مانند Marshal.AllocHGlobal و Marshal.AllocCoTaskMem در اختیار برنامه قرار میگیرند. این حافظه باید به صورت صریحی توسط توسعه دهنده به کمک متدهایی مانند Marshal.FreeHGlobal و Marshal.FreeCoTaskMem آزاد شود. وب سرور Kestrel مخصوص ASP.NET Core، از این روش جهت کار با آرایههای حجیم، جهت کاهش بار GC استفاده میکند.
مزیت کار با Spanها این است که دسترسی امن و type safeایی را به انواع حافظههای مهیا، جهت توسعه دهندگانی که عموما کدهای unsafe ایی را نمینویسند و با اشارهگرها به صورت مستقیم کار نمیکنند، میسر میکند. برای مثال تا پیش از معرفی Spanها، برای دسترسی به 1000 عنصر یک آرایهی 10 هزار عنصری و ارسال آن به یک متد، نیاز بود تا ابتدا یک کپی از این 1000 عنصر را تهیه کرد. این عملیات از لحاظ میزان مصرف حافظه و همچنین زمان انجام آن، بسیار هزینهبر است. با استفاده از <Span<T میتوان یک دید مجازی از آن آرایه را بدون اختصاص آرایهای و یا آرایههایی جدید، ارائه کرد.
مثالی از کاربرد Spanها جهت کاهش تعداد بار تخصیصهای حافظه
برای نمونه، متد IsValidName زیر، بررسی میکند که طول رشتهی دریافتی حداقل 2 باشد و حتما با یک حرف شروع شده باشد:
static class NameValidatorUsingString { public static bool IsValidName(string name) { if (name.Length < 2) return false; if (char.IsLetter(name[0])) return true; return false; } }
string fullName = "User 1"; string firstName = fullName.Substring(0, 4); NameValidatorUsingString.IsValidName(firstName);
همچنین اگر این اطلاعات را از طریق شبکه دریافت کرده باشیم، ممکن است به صورت آرایهای از حروف دریافت شوند:
char[] anotherFullName = { 'A', 'B' };
NameValidatorUsingString.IsValidName(anotherFullName);
NameValidatorUsingString.IsValidName(new string(anotherFullName));
اکنون در C# 7.2، بازنویسی این متد توسط ReadOnlySpan، به صورت ذیل است:
static class NameValidatorUsingSpan { public static bool IsValidName(ReadOnlySpan<char> name) { if (name.Length < 2) return false; if (char.IsLetter(name[0])) return true; return false; } }
ReadOnlySpan<char> fullName = "User 1".AsSpan(); ReadOnlySpan<char> firstName = fullName.Slice(0, 4); NameValidatorUsingSpan.IsValidName(firstName);
و یا اینبار امکان استفادهی از آرایهای از کاراکترها، بدون نیاز به تخصیص حافظهای جدید، برای بررسی اعتبار مقادیر دریافتی میسر است:
char[] anotherFullName = { 'A', 'B' }; NameValidatorUsingSpan.IsValidName(anotherFullName);
برای نمونه از یک چنین APIایی در پشت صحنهی کتابخانههایی مانند SignalR و یا Roslyn، برای بالا بردن کارآیی برنامه، با کاهش تعداد بار تخصیصهای حافظهی مورد نیاز، بسیار استفاده شدهاست. برای نمونه در NET Core 2.1.، حجم رشتههای تخصیص داده شدهی در فریم ورکهای وابسته، به این ترتیب به شدت کاهش یافتهاست.
مثالهایی از کار با API نوع Span
امکان ایجاد یک Span از یک array
var arr = new byte[10]; Span<byte> bytes = arr; // Implicit cast from T[] to Span<T>
Span<byte> slicedBytes = bytes.Slice(start: 5, length: 2); slicedBytes[0] = 42; slicedBytes[1] = 43; slicedBytes[2] = 44; // Throws IndexOutOfRangeException bytes[2] = 45; // OK
همچنین تغییرات بر روی Span (غیر read only) بر روی آرایهی اصلی نیز تاثیر گذار است. برای مثال در اینجا با تغییر bytes[2]، مقدار arr[2] نیز تغییر میکند.
و یا روش دیگر ایجاد Span استفاده از متد AsSpan است:
var array = new byte[100]; Span<byte> interiorRef1 = array.AsSpan().Slice(start: 20);
Span<byte> interiorRef2 = new Span<byte>(array: array, start: 20, length: array.Length - 20);
محدودیتهای کار با Spanها
- Span تنها یک نوع stack-only است.
- Spanها در بین تردها به اشتراک گذاشته نمیشوند. هر استک در یک زمان تنها توسط یک ترد قابل دسترسی است. بنابراین Spanها thread-safe هستند.
- طول عمر Spanها کوتاه است و قابلیت قرارگیری بر روی heap با طول عمر بیشتر را ندارند؛ یعنی:
- به صورت فیلد در یک نوع non-stackonly قابل تعریف نیستند:
class Impossible { Span<byte> field; }
- به عنوان پارامترهای متدهای async قابل استفاده نیستند. چون در این بین در پشت صحنه یک AsyncMethodBuilder تشکیل میشود که در قسمتی از آن، پارامترها بر روی heap قرار میگیرند.
- هرجائیکه عملیات boxing صورت گیرد، نتیجهی عملیات بر روی heap قرار میگیرد. بنابراین در یک چنین مواردی نمیتوان از Spanها استفاده کرد. برای مثال تعریف Func<T> valueProvider و سپس فراخوانی ()valueProvider.Invoke به همراه یک boxing است. بنابراین نمیتوان از spanها به عنوان نوع آرگومان جنریک استفاده کرد. این مورد هرچند کامپایل میشود، اما در زمان اجرا سبب خاتمهی برنامه خواهد شد و یا نمونهی دیگر، عدم امکان دسترسی به آنها توسط reflection invoke APIs است که سبب boxing میشود.
معرفی نوع <Memory<T
با توجه به محدودیتهای Span و خصوصا اینکه به عنوان پارامتر متدهای async قابل استفاده نیست (چون بر روی stack ذخیره میشوند)، نوع دیگری به نام <Memory<T نیز به همراه C# 7.2 ارائه شدهاست. البته این نوع هنوز به بستهی نیوگت فوق اضافه نشدهاست و به همراه ارائه نهایی NET Core 2.1. ارائه خواهد شد.
این نوع، محدودیت <Span<T را نداشته و قابلیت ذخیره سازی بر روی heap را دارا است.
static async Task<int> ChecksumReadAsync(Memory<byte> buffer, Stream stream) { int bytesRead = await stream.ReadAsync(buffer); return Checksum(buffer.Span.Slice(0, bytesRead)); // Or buffer.Slice(0, bytesRead).Span }
5.Visual Studio 2017 15.9 منتشر شد
These are the customer-reported issues addressed in 15.9.5:
- VSX1000: No enough information has been provided to MSBuild in order to establish a connection to a Remote Server.
- Visual C++ 2017 Redistributable for ARM64 is not available via visualstudio.com.
- VC Runtime Redistributable Update for VS 15.9 deletes Registry Key. This fix may have an increased chance of requiring a reboot of the machine in order to install an updated VC++ Redistributable package.
- Incorrect codegen in managed c++ with List to List assignment.
- Can't connect to mac build host after Visual Studio 15.9.4 update.
- Resource directories missed in incremental builds with
AndroidAarLibrary
items. - Lots of external assembly references - JNI ERROR (app bug): local reference table overflow (max=512).
- The Unity Editor has been updated to 2018.3. For more information, please visit the Unity website.
- SSDT: We enabled SQL projects to build schemas that have non-clustered columnstore indexes on an indexed views.
- SSDT: We fixed a significant performance issue in the schema compare tool when generating a script.
- SSDT: We fixed the schema drift detection logic in the schema compare tool which forced a new comparison to reenable scripting and publishing actions.
Security Advisory Notices
مقدمه ای بر Web Sql
In this post we will see some informations about Web SQL. I know you all are familiar with SQL, If not I strongly recommend you to read some basic informations here . As the name implies, Web SQL has so many similarities with SQL. So if you are good in SQL, you will love Web SQL too. Web SQL is an API which helps the developers to do some database operations in client side, like creating database, open the transaction, creating tables, inserting values to tables, deleting values, reading the data.
نگاهی به ویژگیهای Rider
مثال هایی از نحوه نوشتن PBI
- As a site visitor, I can read current news on the home page.
- As a site visitor, I can access old news that is no longer on the home page.
- As a site visitor, I can email news items to the editor. (Note: this could just be an email link to
- the editor.)
- As a site a site editor, I can set the following dates on a news item: Start Publishing Date, Old
- News Date, Stop Publishing Date. These dates refer to the date an item becomes visible on the site (perhaps next Monday), the date it stops appearing on the home page, and the date it is removed from the site (which may be never).
- As a site member, I can subscribe to an RSS feed of news (and events? Or are they separate?).
- As a site editor, I can assign priority numbers to news items. Items are displayed on the front page based on priority.