ශ්‍රී ලංකාවේ නවතම තාක්ෂණික පුවත් 2026-07-27, Monday
💻 ක්‍රමලේඛනය · 🕒 කියවීමට විනාඩි 2 · 👁 1

ඇතුළත මතක පිරිවැය ඉහල යාම: .NET Channels හි Unbounded vs Bounded පරීක්ෂණය

ඇතුළත මතක පිරිවැය ඉහල යාම: .NET Channels හි Unbounded vs Bounded පරීක්ෂණය

ඔබේ .NET යෙදුමක Producer‑Consumer පද්ධතියක් නිර්මාණය කරන විට, Channel.CreateUnbounded භාවිතා කිරීම ඉතා පහසුයි. නමුත් එය සැලකිල්ලෙන් නොබලන මතක පිරිවැය ගැටලුවක් උදාකරයි. මේ ගැන දැනගැනීමට, නවතම පරීක්ෂණයක් සිදු කරමින් ලේඛකයා ඉතා සරල pipeline එකක් සකස් කර ඇත.

පරීක්ෂණයේ සැකසූ තත්ත්වය: එක් Producer, එක් Consumer, 100,000 ක වැඩකාරක (WorkItem) එක් එක් 2 KB payload සමඟ. Consumer එකට එක් අයිතමයක් සක්‍රිය කිරීම සඳහා සාමාන්‍යයෙන් 20 µs කාලයක් ගත වේ. එම නිසා Producer එක Consumer එකට වඩා ඉක්මනින් වැඩ කරයි – ඒ කියන්නේ queue එක අතිශයින් පුරා යයි.

Unbounded channel එක භාවිතා කළ විට, Producer එකට ලගා වීමට 0.56 තත්පරයක් ගත වූ අතර, Consumer එකට ඉතිරි 2 තත්පරයක් ගත වුණා. එම අතර queue එකේ පීක් ගැඹුර 90,769 අයිතමයක්, මතකය 9 MB සිට 188 MB දක්වා ඉහල ගොස්, 600 ms පමණ කාලයක් තුළම එම මතකය තවත් අඩු නොවීය. මතකය අධික වීම නිසා Garbage Collector එකට ඒ දත්ත ඉවත් කිරීම අඩු වෙලා, පද්ධතියේ සම්පූර්ණ ප්‍රතිපලවලට බලපාන “ඇඳුම්” තත්වයක් පෙන්වා දී ඇත.

එසේම, එකම pipeline එකට bounded channel එකක් (capacity 1,000) යොදා බැලූ විට, WriteAsync ක්‍රියාකාරකම Consumer එකේ වේගයට අනුකූලව ඉදිරියට යයි. Producer එකට 2.23 තත්පරයක් ගත වූ නමුත් සමස්ත කාලය 2.25 තත්පරයක් පමණයි – එනම් මතක පිරිවැය 19 MB දක්වා පමණක්. මේ නිසා මතක භාරය අඩු වීමත් සමඟ, පද්ධතියේ throughput එකට අඩුපාඩුවක් නොපැවතී.

ශ්‍රී ලංකාවට ඇති වැදගත්කම

ශ්‍රී ලංකාවේ බොහෝ startups සහ software houses, .NET පදනම් වූ micro‑services, API gateways, data pipelines වැනි ක්‍රමලේඛන ආකෘති භාවිතා කරයි. Unbounded channel එකේ මතක පිරිවැය ගැන අවධානයක් නොදෙන්නේ නම්, production පරිසරයේ හදිසි traffic spikes එකක් මතුවීමෙන් සේවා අඩංගුවක් (out‑of‑memory) සිදු විය හැකිය.

  • Developers – back‑pressure යෙදීමේ වැදගත්කම, memory leak ගැටලුවක් වළක්වා, කේතයේ reliability වැඩි කරයි.
  • Businesses – මතක පරිභෝජනය අඩු කිරීමෙන් cloud hosting පිරිවැය ඉතිරි කර, SLA compliance වැඩි කරයි.
  • Students – real‑world concurrency patterns ගැන ඉගෙන ගැනීමට, .NET Channels භාවිතයෙන් performance profiling කර ගත හැකිය.

අවසන් වශයෙන්, “unbounded” channel එකේ “never blocks” කියන වාදය, මතකයට ගොඩනැගුණු “waiting” ලෙස පෙනේ. bounded channel එක භාවිතා කර back‑pressure එකක් යොදීම, මතක පිරිවැය අඩු කර, latency එකේ පාලනයක් ලබා දේ. එබැවින්, production code ලියන විට, channel capacity එක සකස් කර, FullMode.Wait වැනි විකල්ප භාවිතා කිරීම අත්‍යවශ්‍ය වේ.

මෙම පරීක්ෂණය මඟින්, .NET developer කෙනෙකුට memory‑aware design එකක් ගොඩනැගීමට, performance metrics නිරීක්ෂණය කර, හොඳම concurrency strategy එක තෝරා ගැනීමට මඟ පෙන්වයි.

💡 ඔබේ පද්ධතියේ channel සැකසීම් දැන්ම පරීක්ෂා කරන්න!
මූලාශ්‍රය මෙම ලිපිය AI මගින් රචිත මුල් සාරාංශයකි. සම්පූර්ණ වාර්තාව කියවන්න:
Dev.to ↗
#dotnet #channels #performance #memory #backpressure