TGViewer
Software Philosophy Software Philosophy @softwarephilosophy · 3.48K subscribers
Post #2267 3.35K
شمشیر دو لبه IEnumerable و yield return در C# : راهکارهایی برای بهینه‌سازی و جلوگیری از افت عملکرد

در زبان C#، وقتی می‌خواهیم با مجموعه‌ای از داده‌ها یا توالی‌ها کار کنیم، معمولاً از ساختارهای داده‌ای مثل لیست‌ها یا آرایه‌ها استفاده می‌کنیم. اما گاهی نیاز داریم داده‌ها را به صورت تنبل (Lazy) پردازش کنیم، یعنی فقط زمانی داده‌ها تولید شوند که واقعاً به آن‌ها نیاز داریم. اینجاست که IEnumerable و yield return وارد میدان می‌شوند و می‌توانند کار ما را بسیار ساده‌تر و بهینه‌تر کنند.

ابزار IEnumerable این امکان را به ما می‌دهد که به طور مؤثر بر روی مجموعه‌ای از داده‌ها پیمایش کنیم، بدون اینکه نیاز باشد تمام داده‌ها را یکجا در حافظه بارگذاری کنیم. از طرف دیگر، yield return به ما اجازه می‌دهد که یک توالی از داده‌ها را مرحله به مرحله و در طول زمان تولید کنیم، به جای اینکه همه‌چیز یکجا آماده شود.

اما مشکل از آنجا شروع می‌شود که استفاده نادرست از این قابلیت‌ها می‌تواند منجر به کاهش کارایی برنامه شود. مثلاً فرض کنید در حال استفاده از yield return هستید و هر بار که از داده‌های تولید شده استفاده می‌کنید، محاسبات سنگینی برای تولید آن داده‌ها انجام می‌شود. اگر این محاسبات هر بار تکرار شوند، زمان اجرای برنامه افزایش می‌یابد و منابع سیستم بی‌مورد مصرف می‌شوند. یا در مواقعی که منابعی مثل فایل‌ها یا دیتابیس را در دسترس داریم، استفاده نادرست از IEnumerable و اجرای به تعویق افتاده (Deferred Execution) ممکن است باعث خطاهایی در مدیریت منابع شود.

در این پست، ما دقیقاً به این مشکلات می‌پردازیم و نشان می‌دهیم که چطور می‌توانیم با آگاهی و استفاده صحیح از IEnumerable و yield return هم از مزایای آنها بهره‌مند شویم و هم از بروز مشکلات و افت عملکرد جلوگیری کنیم. همچنین چند مثال عملی از جمله کار با دیتابیس، فایل‌ها، و لیست‌های داده ارائه می‌دهیم که به شما کمک می‌کند این ابزارها را به درستی به کار بگیرید.

🔗 نسخه کامل مقاله را می‌توانید اینجا مطالعه کنید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#هوتن_همتی (لینکدین)

کانال تلگرام:
@SoftwarePhilosophy

_______
DEV Community The Double-Edged Sword of IEnumerable and yield return in C# IEnumerable and yield return are powerful features in C# that enable developers to create lazy...
  • 👍 15
  • 🔥 2
  • 👏 1
More from @softwarephilosophy
  1. Sep 27, 2026نگو JEV بگو System One! دنیل کانمن (Daniel Kahneman) توی کتاب معروفش «تفکر، سریع و کند» (T…
  2. Sep 23, 2026بازنویسی کل GitHub Copilot Runtime با Rust 🔶 حدود ۱۲۰،۰۰۰ دلار هزینه توکن و سه هفته وقت ی…
  3. Sep 15, 2026ورک‌شاپ «AI Agents in C# (MAF)» در این ورک‌شاپ به بررسی امکانات جدید برنامه‌نویسی با کتابخ…
  4. Sep 12, 2026کد مدریت شده (Managed Code) در دات‌نت یعنی چی؟ ▫️به زبان ساده: کد مدریت شده (Managed Code)…
  5. Sep 5, 2026آشنایی با Attributeها در سی‌شارپ در سی شارپ، Attributeها برای اضافه کردن metadata یا اطلاع…
  6. Aug 25, 2026اگر در دات نت Agent، MCP Server یا ابزارهای مبتنی بر هوش مصنوعی توسعه میدهی، این پروژه میت…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →