نکاتی برای کار بهینهی با آرایهها در سیشارپ
نویسنده: وحید نصیری
تاریخ: ۱۴۰۴/۰۱/۱۳ ۱۰:۰۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
ArraySegment<T> و Span<T> برای برش آرایهها و بهینهسازی عملکرد است. این ابزارها به کاهش مصرف حافظه و بهبود کارایی، بهویژه در برنامههای حساس به عملکرد، کمک میکنند. ArraySegment<T> و Span<T>ArraySegment<T> یک ساختار است که بخشی از آرایه را نمایان میکند و برای پردازش دادهها بدون بار اضافی حافظه مناسب است. مثال زیر نشان میدهد چگونه میتوان با ArraySegment<T> بخشی از آرایه را استخراج کرد: int[] numbers = { 1, 2, 3, 4, 5 };
var slice = new ArraySegment<int>(numbers, 1, 3); // نتیجه: {2, 3, 4}ArraySegment<T> محدود به آرایههای مدیریتشده است. در مقابل، Span<T> یک نوع جدیدتر است که نه تنها با آرایههای مدیریتشده، بلکه با حافظه مبتنی بر پشته و حافظه مدیریتنشده نیز کار میکند. مثال زیر استفاده از Span<T> را نشان میدهد: int[] numbers = { 1, 2, 3, 4, 5 };
Span<int> slice = numbers.AsSpan(1, 3); // برش کارآمد: {2, 3, 4}Span<T> به دلیل طراحی بهینه، برای سناریوهای نیازمند دسترسی سریع و ایمن به حافظه، مانند پردازش دادههای بزرگ، مناسب است. Span<T>Span<T> با کاهش تعاملات با جمعکننده زباله (Garbage Collector) و ارائه دسترسی مستقیم به حافظه، عملکرد را بهبود میبخشد. برخلاف ArraySegment<T> که ممکن است سربار داشته باشد، Span<T> سریعتر عمل میکند و نسخههای فقطخواندنی مانند ReadOnlySpan<T> برای جلوگیری از تغییرات ناخواسته دادهها ارائه میدهد.Span<T> برای پردازش همگام (Synchronous) و نیاز به عملکرد بالا ترجیح داده میشود، در حالی که ArraySegment<T> برای سازگاری با رابطهایی مانند IList<T> یا استفاده از LINQ مناسبتر است. ArraySegment<T> و Span<T>| ویژگی | ArraySegment<T> | Span<T> |
| نوع حافظه پشتیبانیشده | فقط آرایههای مدیریتشده | آرایهها، حافظه مبتنی بر پشته، حافظه مدیریتنشده |
| عملکرد | ممکن است سربار داشته باشد | بهینه برای برنامههای حساس به عملکرد |
| قابلیت فقطخواندنی | ندارد | دارد ReadOnlySpan |
| مورد استفاده | سازگاری با APIهای قدیمی، LINQ | پردازش سریع، سناریوهای همگام |