این مقاله در مورد ref struct در سی شارپ داتنت ۹ بحث میکند و مزایا و محدودیتهای آن را برجسته میکند.
ref struct چیست؟
- یک struct خاص که روی پشته (stack) تخصیص داده میشود، نه heap.
- دسترسی کنترلشدهای را به حافظه را فراهم میکند و از برخی خطاهای مرتبط با حافظه جلوگیری میکند.
ویژگیهای کلیدی:
- تخصیص روی پشته: عملکرد را بهبود میبخشد؛ به ویژه برای نمونههای کوتاه مدت.
- بدون تبدیل نوع (Boxing): از تبدیل نوع و ذخیره در مجموعههای تخصیص داده شدهی در heap جلوگیری میکند.
- طول عمر محدود: حافظه بلافاصله پس از خروج از محدوده، بازیابی میشود.
مزایا:
- عملکرد: برای دادههای موقت و ساختارهای بزرگ کارآمد است.
- کنترل حافظه: کنترل مستقیمی را بر نحوهی استفاده از حافظه، فراهم میکند.
- ایمنی: از عملیات ناامن، مانند وظایف ناهمزمان از یک
ref struct، جلوگیری میکند.
معایب:
- قابلیت استفادهی محدود: نمیتواند به عنوان یک فیلد در کلاسها، انواع تخصیص داده شدهی در heap یا مجموعههای خاص استفاده شود.
- خطر سرریز پشته: نمونههای بزرگ میتوانند باعث سرریز پشته شوند.
- محدودیتهای استفاده: استفادهی از آن با ویژگیهایی مانند
async/await محدود است.
مثال کد:
- struct
SensitiveBuffer یک Span of byte را برای مدیریت کارآمد حافظه کپسوله میکند. - شامل یک متد برای پاک کردن بافر برای امنیت است.
مشاهده مطلب اصلی