1e11

مقایسه List و Array در سی شارپ

لینک کوتاه https://codecell.ir/a/1e11
به اشتراک گذاری
نویسنده:
0
0
2
آموزش های نویسنده:
مقایسه List و Array در سی شارپ

تفاوت آرایه و لیست در سی شارپ چیست؟

یک آرایه و یک لیست هر دو به عنوان مجموعه ای از مقادیر عمل می کنند، اما در نحوه ذخیره محتوای خود در حافظه و نحوه دسترسی به آنها متفاوت هستند. به منظور استفاده موثر از هر یک از آن ها، باید تفاوت های بین آن ها را درک کنیم تا بتوانیم مناسب ترین مورد را برای اهداف خود انتخاب کنیم.

آرایه در سی شارپ چیست؟

آرایه مجموعه یا دنباله ای از عناصر است و می تواند انواع مختلفی داشته باشد (string، float، int، float و غیره...) اما باید از یک نوع باشند. آرایه اجازه می دهد تا بسیاری از متغیر های یک نوع را در یک متغیر ذخیره کنید.

یکی از ویژگی های اصلی آرایه ها در سی شارپ این است که همیشه طول مشخصی دارند که برابر با تعداد عناصری است که در داخل آن ها قرار می گیرند.

لیست در سی شارپ چیست؟

لیست گروهی از اشیاء است و می تواند انواع مختلفی داشته باشد.

تفاوت اصلی لیست با آرایه در سی شارپ این است که برخلاف آرایه ها طول آن نباید تعریف شود، آن ها می توانند طول متغیر داشته باشند.

در این مقاله قصد داریم Benchmark و کارایی List<T> با سایز داینامیک،  List<T> با سایز ثابت و Array ها را بررسی کنیم.

ابتدا یک برنامه کنسول .Net 7.0 ایجاد می کنیم و Benchmark های خودمان را برای تست و ارزیابی  List<T>، Array و List<T>(count) می نویسیم.

برای استفاده از Benchmark ابتدا باید پکیج BenchmarkDotNet را نصب کنیم:

dotnet add package BenchmarkDotNet --version 0.13.2

برای بررسی Benchmark لیست در سی شارپ دو سناریو در نظر می گیریم. در سناریوی اول، دو List<T> ایجاد می کنیم که یکی از آنها یک لیست پویا است و در سناریوی دوم ظرفیت لیست را در سازنده لیست تنظیم می کنیم. تعداد ظرفیت های مختلف را به هر دو لیست اضافه می کنیم و نتیجه Benchmark را بررسی می کنیم.

ما یک کلاس "ListCapacityPerformance" ایجاد می کنیم و آن را با ویژگی [MemoryDiagnoser] مزین می کنیم. MemoryDiagnoser امکان اندازه گیری تعداد بایت های اختصاص داده شده و فرکانس garbage collection(جمع آوری زباله) را فراهم می کند.

using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
[MemoryDiagnoser]
public class ListCapacityPerformance
{
  .
  .
}

با ویژگی [Params()] می توانیم مجموعه ای از مقادیر را برای ظرفیت لیست مشخص کنیم. مقدارها باید ثابت باشند. در نتیجه، برای هر مقدار نتیجه ای دریافت خواهیم کرد.

[Params(20, 80, 300, 800)]
public int capacity;

در مثال زیر، ما List<> را ایجاد می کنیم اما هیچ ظرفیتی برای آن تنظیم نمی کنیم. سپس ما اعدادی را برای هر متغیر آرایه "count" به این لیست پویا اضافه می کنیم. در پایان، تخصیص حافظه، زمان کل و غیره را بررسی خواهیم کرد.

در مثال دوم، ما " List<int>(capacity)" را با ظرفیت ثابت ایجاد خواهیم کرد. برای هر حلقه، طول لیست را به عنوان مقدار capacity تعیین می کنیم.

برای اجرای بنچمارک ها باید تکه کد زیر را در فایل Program.cs  وارد کنیم:

var summary1 = BenchmarkRunner.Run<ListCapacityPerformance>();

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

پروژه را در حالت “Release” بیلد می کنیم و سپس آن را به صورت “Start Without Debugging” اجرا می کنیم.

در تصویر زیر مشاهده می کنید که حافظه تخصیص داده شده(allocated) به لیست با ظرفیت ثابت، کمتر و سریع تر است. حتی با مقادیر بزرگتر، این gap بیشتر می شود.

مقایسه لیست و آرایه در سی شارپ

 اگر یک مورد را به List<>(x) اضافه کنید که بیش از ظرفیت آن باشد، سی شارپ اندازه لیست را 2 برابر اندازه فعلی برای هر بار اضافه کردن افزایش می دهد. List<> همیشه قبل از اضافه شدن هر مورد، حد خود را بررسی می کند.

مقایسه List و Array در سی شارپ

گاهی اوقات در مقابل بسیاری از مزایای List ها، کار با Array ها می تواند بهتر باشد.

برای بررسی این موضوع مثال زیر را بررسی می کنیم. مانند مثال بالا، ما از 1 تا حداکثر count را به یک لیست و یک آرایه اضافه کرده ایم.

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

همانطور که در بنچمارک ها می بینیم Array بسیار سریع تر از List است. می دانیم که بیشتر توسعه دهندگان استفاده از List را به جای Array به دلایل زیر ترجیح می دهند:

List در سی شارپ دارای روش های خاصی برای افزودن، حذف، جستجو و مرتب سازی عناصر است.

List<T> یک ساختار داده پویا است، به این معنی که وقتی آن را ایجاد می کنیم نیازی به دانستن تعداد عناصر نداریم. بنابراین اندازه لیست را می توان در زمان اجرا افزایش داد.

مقایسه لیست و آرایه در سی شارپ

Array ها در سی شارپ نسبت به List ها کمتر مورد استفاده قرار می گیرند، اما بسیار سریع تر هستند. ما می توانیم عناصر یک آرایه را با استفاده از index ها جستجو کنیم. اما لیست نیاز به iteration(تکرار) دارد، این به معنای کندی زمان جستجو برای لیست است. بر خلاف لیست ها، آرایه ها به حافظه کمتری نیاز دارند. اما لیست‌ ها ویژگی های مفید زیادی دارند، بنابراین نسبت به آرایه ‌ها ارجحیت دارند.

دریافت سورس پروژه مقایسه List و Array در سی شارپ در net7

نتیجه گیری:

ساختارهای داده بسیار متفاوتی در سی شارپ وجود دارد. هر ساختار داده دارای نقاط قوت و ضعفی است که بسته به کار بر عملکرد تأثیر می گذارد. ما در این مقاله در مورد آرایه ها و لیست ها صحبت کردیم و آن ها را با هم مقایسه و بررسی کردیم. امیدوارم این مقاله به شما در درک تفاوت‌ های آرایه و لیست در سی شارپ کمک کرده باشد.

دیگر مقالات آموزش برنامه نویسی مدرس

Response Caching در ASP.NET Core

Response Caching یک مکانیزم ذخیره سازی پاسخ سرور توسط مرورگر یا سایر کلاینت ها است. با استفاده از Response Caching در Asp.net Core می توانیم عملکرد و کارایی سیستم را بالا ببریم.

669 0 1402/10/22

Output Caching در ASP.NET Core 8.0

Output Caching یک ویژگی جدید است که از زمان .NET 7 معرفی شده است. این ویژگی به ما این امکان را می دهد که به راحتی یک کش پاسخ برای Web API خود بدون پیاده سازی IMemoryCache راه اندازی کنیم.

723 0 1402/10/14

الگوی طراحی زنجیره مسئولیت در سی شارپ

الگوی زنجیره مسئولیت یا Chain of Responsibility Design Pattern یک الگوی طراحی رفتاری(behavioral design pattern) است که اجازه می‌دهد یک درخواست در امتداد زنجیره‌ای از کنترل‌کننده‌های بالقوه ارسال شود تا زمانی که درخواست مناسب برای پردازش آن را پیدا کند.

685 2 1402/10/01

ViewComponent در ASP.NET Core

در ASP.NET Core با استفاده از ViewComponent ها می توان اجزای ماژولار، قابل استفاده مجدد، قابل نگهداری و مقیاس پذیر برای ساخت برنامه های کاربردی وب ایجاد کرد. در این مقاله به نحوه ایجاد و فراخوانی ViewComponent در Asp.net core پرداخته ایم.

1٬431 2 1402/05/15

تطبیق الگو در NET 7: ساده سازی تجزیه و تحلیل داده ها

تطبیق الگو یا Pattern Matching در net7 یک تکنیک قدرتمند برای تجزیه و تحلیل و دستکاری داده ها بر اساس ساختار آن ها است. تطبیق الگو یا Pattern Matching به توسعه دهندگان اجازه می دهد تا مقادیر را با یک الگوی خاص مطابقت دهند و اقدامات مربوطه را انجام دهند.

880 1 1402/04/05

تزریق وابستگی در ASP.NET Core

تزریق وابستگی (DI) یک الگوی طراحی نرم افزاری است که امکان ایجاد برنامه های کاربردی و ماژولار را فراهم می کند.. در .NET Core تزریق وابستگی یا Dependency injection یک ویژگی مهم است که می تواند برای ساده سازی توسعه برنامه، بهبود تست پذیری و کاهش پیچیدگی کد مورد استفاده قرار گیرد.

1٬964 1 1402/02/04

ضروری ترین کتابخانه های NuGet برای ASP.NET Core

در این مقاله مهمترین،ضروری ترین و پرکاربردترین کتابخانه های NuGet که هر توسعه‌ دهنده‌ ASP.NET Core باید برای توسعه بهتر و کاهش زمان مورد نیاز برای برنامه ‌های خود از آن استفاده کنند را مورد بررسی قرار داده ایم.

1٬517 1 1401/12/29

الگوی طراحی Factory در سی شارپ

الگوهای طراحی یکی از مهمترین جنبه های طراحی و معماری نرم افزار است. Factory Method یک الگوی طراحی ایجادی است که یک رابط برای ایجاد اشیاء در یک سوپر کلاس فراهم می‌کند. ما در این مقاله الگوی Factory Method Design در سی شارپ را بررسی می کنیم.

1٬642 1 1401/10/28

.NET Core چیست؟

.Net (با تلفظ «دات نت») یک چارچوب نرم افزاری کامپیوتری مدیریت شده رایگان و منبع باز برای سیستم عامل های ویندوز، لینوکس و macOS است. این پروژه در درجه اول توسط کارمندان مایکروسافت از طریق دات نت توسعه یافته و تحت مجوز MIT منتشر شده است.

2٬587 2 1401/03/16

Redirect درخواست (ریدایرکت) در asp.net core

در برنامه های ASP.NET Core برای تغییر مسیر(ریدایرکت) و Redirect به یک URL خاص روش های مختلفی وجود دارد. در این مقاله با این تکنیک ها و کدهای مورد نیاز برای تغییر مسیر یک درخواست در ASP.NET Core آشنا می شویم.

2٬562 5 1401/02/12

تبدیل enum به لیست انتخابی در asp.net core

در این آموزش ما بوسیله Reflection ها در سی شارپ و asp.net core یک enum را به لیست انتخابی یا SelectListItem تبدیل خواهیم کرد و بوسیله تگ select در بوت استرپ 5 نمایش می دهیم.

1٬753 3 1401/02/03

نحوه ارسال ایمیل در asp و c#

امروزه ارسال ایمیل به امری ضروری در پروژه های وب تبدیل شده است.از ارسال ایمیل در asp می توان در بخش های تایید حساب کاربری،بازیابی رمز عبور،ایمیل مارکتینگ،ارسال خبرنامه و ... استفاده نمود.در این آموزش نحوه ارسال ایمیل در asp core و سی شارپ پیاده سازی گردیده است.

2٬582 5 1401/02/03
نظرات

برای ثبت نظر باید در سایت ثبت نام یا ورود نمایید