es
Feedback

¡No caigas en manos de tramposos! Telemetrio encuentra y marca estos canales 👉 Si quieres ver la etiqueta, suscríbete

| کانال توسعه‌دهندگان سی‌شارپ |

| کانال توسعه‌دهندگان سی‌شارپ |

Ir al canal en Telegram

⭕️ کانال توسعه‌دهندگان سی‌شارپ دولوپیکس 💠 دولوپیکس | جامعه توسعه‌دهندگان ایرانی 💎 @Developix 🚀 Developix.ir 📌 پشتیبانی و تبلیغات: @DevelopixSupport

Mostrar más
1 008
Suscriptores
Sin datos24 horas
+27 días
-330 días

Cargando datos

Nube de Etiquetas
Sin datos
¿Algún problema? Por favor, actualice la página o contacte a nuestro gerente de soporte.
Menciones Entrantes y Salientes
---
---
---
---
---
---
Atraer Suscriptores
oct '26
octubre '26
+74
en 0 canales
septiembre '260
en 0 canales
Get PRO
agosto '260
en 0 canales
Get PRO
julio '260
en 0 canales
Get PRO
junio '260
en 0 canales
Get PRO
mayo '260
en 0 canales
Get PRO
abril '260
en 0 canales
Get PRO
marzo '260
en 0 canales
Get PRO
febrero '260
en 0 canales
Get PRO
enero '260
en 0 canales
Get PRO
diciembre '250
en 0 canales
Get PRO
noviembre '250
en 0 canales
Get PRO
octubre '250
en 0 canales
Get PRO
septiembre '250
en 0 canales
Get PRO
agosto '250
en 0 canales
Get PRO
julio '250
en 0 canales
Get PRO
junio '250
en 0 canales
Get PRO
mayo '250
en 0 canales
Get PRO
abril '250
en 0 canales
Get PRO
marzo '250
en 0 canales
Get PRO
febrero '250
en 0 canales
Get PRO
enero '250
en 0 canales
Get PRO
diciembre '240
en 0 canales
Get PRO
noviembre '240
en 0 canales
Get PRO
octubre '240
en 0 canales
Get PRO
septiembre '240
en 0 canales
Get PRO
agosto '24
+11
en 0 canales
Get PRO
julio '24
+50
en 0 canales
Get PRO
junio '24
+45
en 0 canales
Get PRO
mayo '24
+30
en 1 canales
Get PRO
abril '24
+30
en 0 canales
Get PRO
marzo '24
+56
en 0 canales
Get PRO
febrero '24
+87
en 0 canales
Get PRO
enero '24
+127
en 0 canales
Get PRO
diciembre '23
+108
en 0 canales
Get PRO
noviembre '23
+596
en 0 canales
Fecha
Crecimiento de Suscriptores
Menciones
Canales
28 octubre0
27 octubre+1
26 octubre+3
25 octubre0
24 octubre+1
23 octubre+1
22 octubre0
21 octubre0
20 octubre0
19 octubre+1
18 octubre0
17 octubre+1
16 octubre0
15 octubre0
14 octubre0
13 octubre+1
12 octubre0
11 octubre0
10 octubre0
Publicaciones del Canal
این کد چی چاپ می‌کنه؟ چرا با اینکه کاربر رو از مجموعه حذف نکردیم، نتیجه می‌تونه خلاف انتظار باشه؟ کد رو چطور اصلاح می‌کنی که
این کد چی چاپ می‌کنه؟ چرا با اینکه کاربر رو از مجموعه حذف نکردیم، نتیجه می‌تونه خلاف انتظار باشه؟ کد رو چطور اصلاح می‌کنی که این مشکل پیش نیاد؟ 🔖 #CSharp #سی_شارپ 👤 Developix 💎 Channel: @DevelopixCSharp

2
🛡️ قوانین اعتبارسنجی را از مدل‌ها جدا کن وقتی شرط‌های ثبت‌نام بین سرویس و کنترلر پخش می‌شوند، تغییرشان دردسر دارد. کتابخانهٔ FluentValidation قوانین را در کلاس‌های مستقل و قابل تست نگه می‌دارد؛ بدون شلوغ‌کردن مدل با Attributeها. 🔹 قوانین آماده برای ایمیل، طول و محدودهٔ عددی 🔹 شرط‌های سفارشی و اعتبارسنجی Async 🔹 پیام خطای قابل تنظیم برای هر قانون نصب و یک نمونهٔ ساده: dotnet add package FluentValidation using FluentValidation; var validator = new UserValidator(); var result = validator.Validate(new User("bad")); Console.WriteLine(result.IsValid); // False public record User(string Email); public class UserValidator : AbstractValidator<User> { public UserValidator() { RuleFor(x => x.Email) .NotEmpty().EmailAddress(); } } 💡 برای قوانین Async از ValidateAsync استفاده کن. مستندات رسمی 🚀 از قوانین یک فرم کوچک شروع کن؛ تست‌کردنشان هم ساده‌تر می‌شود. 🔖 #CSharp #سی_شارپ #CSharp #Validation #FluentValidation 👤 Developix 💎 Channel: @DevelopixCSharp
239
3
🔥 پروژه: ملون‌لودر؛ ابزار مودینگ یونیتی برای توسعه‌دهندگان سی‌شارپ که می‌خواهند سراغ مودنویسی بازی‌های Unity بروند، MelonLoa
🔥 پروژه: ملون‌لودر؛ ابزار مودینگ یونیتی برای توسعه‌دهندگان سی‌شارپ که می‌خواهند سراغ مودنویسی بازی‌های Unity بروند، MelonLoader پروژه‌ای دیدنی است: یک Mod Loader با پشتیبانی از هر دو محیط Mono و IL2CPP. نکتهٔ مهمش همین پشتیبانی دوگانه است؛ برای بررسی مودینگ، محدود به بازی‌هایی نیستی که از Mono استفاده می‌کنند. البته سازگاری با این دو محیط به معنی تضمین کارکرد در همهٔ بازی‌ها نیست. برای شروع، مستندات و کد پروژه را ببین؛ مسیر خوبی برای آشنایی با مودنویسی در Unity است. ⭐️ 19 stars this week 🔖 #CSharp #سی_شارپ #CSharp #Unity #MelonLoader 💎 @DevelopixCSharp
256
4
‎ سؤال سی‌شارپ (سطح متوسط رو به سخت) در کد زیر، از async/await و Task.Run استفاده شده است. اجرای برنامه فقط روی یک Thread انج
‎ سؤال سی‌شارپ (سطح متوسط رو به سخت) در کد زیر، از async/await و Task.Run استفاده شده است. اجرای برنامه فقط روی یک Thread انجام می‌شود (مثلاً در یک کنسول‌اپ ساده بدون SynchronizationContext خاص). خروجی نهایی این برنامه دقیقاً چه رشته‌ای است که در کنسول چاپ می‌شود؟ (جواب را دقیق و به ترتیب کاراکترها بنویسید، شامل خطوط جدید) 🔖 #CSharp #سی_شارپ 👤 Developix 💎 Channel: @DevelopixCSharp
258
5
🔥 پروژه: ‏نصب‌کننده ReShade HDR برای بازی‌ها اگر با گرافیک بازی‌ها و رندرینگ سروکار داری، پروژه ReShade HDR Installer حسابی
🔥 پروژه: ‏نصب‌کننده ReShade HDR برای بازی‌ها اگر با گرافیک بازی‌ها و رندرینگ سروکار داری، پروژه ReShade HDR Installer حسابی دیدنی است 🎮 این ابزار، نصب و پیکربندی ReShade با پروفایل‌های HDR را برای بازی‌ها خودکار می‌کند؛ از شناسایی مسیر بازی تا کپی فایل‌ها و تنظیم پریست‌ها. برای ایده گرفتن درباره طراحی ابزارهای نصب، لانچرهای بازی یا مدیریت مودها در سی‌شارپ، کدش منبع الهام خوب و عملی است. سورس این پروژه را اینجا می‌توانی ببینی: github.com/RankFTW/RHI ⭐️ 333 stars this week 🔖 #CSharp #سی_شارپ #سی‌شارپ #C# #_NET 💎 @DevelopixCSharp
343
6
تو سی‌شارپ وقتی توی حلقه رشته می‌سازی، حواست باشه StringBuilder رو فراموش نکنی. روش اول هم کد رو به‌هم می‌ریزه هم برای حجم دی+1
تو سی‌شارپ وقتی توی حلقه رشته می‌سازی، حواست باشه StringBuilder رو فراموش نکنی. روش اول هم کد رو به‌هم می‌ریزه هم برای حجم دیتای زیاد خیلی کند و پرهزینه‌ست، چون هر بار یه string جدید می‌سازه. روش دوم با StringBuilder هم تمیزتره هم از نظر Performance و مصرف حافظه خیلی بهتر جواب می‌ده؛ مخصوصاً وقتی با دیتابیس یا فایل لاگ سروکار داری و احتمال بزرگ شدن خروجی زیاده. 🔖 #CSharp #سی_شارپ 👤 Developix 💎 Channel: @DevelopixCSharp
359
7
‏این کد async رو چطور درستش می‌کنی؟ اینجا متد async ظاهراً درست نوشته شده، ولی یه ایراد مهم تو استفاده از Task توش هست که می‌
‏این کد async رو چطور درستش می‌کنی؟ اینجا متد async ظاهراً درست نوشته شده، ولی یه ایراد مهم تو استفاده از Task توش هست که می‌تونه باعث Deadlock یا بلاک شدن بیخودی بشه. مشکل دقیقاً کجاست و چطور باید اصلاحش کنی؟ 🔖 #CSharp #سی_شارپ 👤 Developix 💎 Channel: @DevelopixCSharp
362
8
🔥 پروژه: ‏Discord Chat Exporter برای لاگ دیسکورد برای موقع‌هایی که لازم داری لاگ چت‌های دیسکورد را نگه داری، پروژهٔ Discord
🔥 پروژه: ‏Discord Chat Exporter برای لاگ دیسکورد برای موقع‌هایی که لازم داری لاگ چت‌های دیسکورد را نگه داری، پروژهٔ Discord Chat Exporter خیلی به‌درد بخور است 🔧 یک ابزار متن‌باز نوشته‌شده با C# و .NET که چت‌ها را از سرور، DM و گروه‌ها گرفته و در قالب‌های مختلف (مثلاً HTML یا JSON) روی دیسک ذخیره می‌کند؛ با فیلتر بر اساس کانال، بازهٔ زمانی و غیره. برای آرشیو تیم، گزارش داخلی یا مهاجرت از دیسکورد عالی است. سورس و باینری‌ها این‌جاست: لینک پروژه 🚀 ⭐️ 52 stars this week 🔖 #CSharp #سی_شارپ #سی‌شارپ #ابزار #Discord 💎 @DevelopixCSharp
353
9
خروجی اجرای این کد چیست؟ در این مثال با یک سناریوی closure در LINQ و اجرای تنبل (Deferred Execution) روبه‌رو هستیم. دقت کنید
خروجی اجرای این کد چیست؟ در این مثال با یک سناریوی closure در LINQ و اجرای تنبل (Deferred Execution) روبه‌رو هستیم. دقت کنید که چه زمانی query ساخته می‌شود و چه زمانی مقدار multiplier تغییر می‌کند. پاسخ را دقیقا مطابق خروجی کنسول بنویسید (شامل خطوط جداگانه). 🔖 #CSharp #سی_شارپ 👤 Developix 💎 Channel: @DevelopixCSharp
428
10
در کد زیر هدف این است که نتیجهٔ یک متد async روی Thread اصلی دریافت شود، اما پیاده‌سازی فعلی می‌تواند باعث Deadlock شود و UI
در کد زیر هدف این است که نتیجهٔ یک متد async روی Thread اصلی دریافت شود، اما پیاده‌سازی فعلی می‌تواند باعث Deadlock شود و UI را فریز کند. سوال: در این کد چه چیزی از نظر نحوهٔ صدا زدن متد async اشتباه است و این الگو را چطور باید اصلاح کرد تا هم نتیجهٔ متد async گرفته شود و هم خطر Deadlock و فریز شدن UI برطرف شود؟ فقط بخش‌های لازم را بازنویسی یا اصلاح کنید، نیازی به تغییر کامل ساختار کلاس نیست. 🔖 #CSharp #سی_شارپ 👤 Developix 💎 Channel: @DevelopixCSharp
430
11
💠 نسخه جدید محیط توسعه Rider منتشر شده است 🔸 ارتقا از نسخه 2026.1.4 به 2026.2 🔖 #rider, #csharp, #release 💎 @DevelopixCSh
💠 نسخه جدید محیط توسعه Rider منتشر شده است 🔸 ارتقا از نسخه 2026.1.4 به 2026.2 🔖 #rider, #csharp, #release 💎 @DevelopixCSharp
391
12
در کد زیر، از LINQ و یک لیست مشترک استفاده شده است، اما به خاطر deferred execution و تغییر متغیر خارجی، رفتار نهایی کد غافلگی
در کد زیر، از LINQ و یک لیست مشترک استفاده شده است، اما به خاطر deferred execution و تغییر متغیر خارجی، رفتار نهایی کد غافلگیرکننده است و نتیجه‌ای که در پایان چاپ می‌شود، چیزی نیست که توسعه‌دهنده انتظار داشته باشد. سوال: چه تغییری در این کد باید انجام شود تا کوئری LINQ نتیجه‌ای پایدار و مستقل از تغییرات بعدی لیست numbers و مقدار threshold برگرداند و خروجی چاپ‌شده مطابق وضعیت لحظه تعریف کوئری باشد؟ 🔖 #CSharp #سی_شارپ 👤 Developix 💎 Channel: @DevelopixCSharp
488
13
در کد زیر یک event handler ناهمگام نوشته شده که روی یک دکمه صدا زده می‌شود: public class DataLoader { public event EventHandl
در کد زیر یک event handler ناهمگام نوشته شده که روی یک دکمه صدا زده می‌شود: public class DataLoader { public event EventHandler DataLoaded; public async void Load() { await Task.Delay(1000); throw new Exception("Something went wrong"); } } public class Program { public static void Main() { var loader = new DataLoader(); loader.DataLoaded += async (s, e) => { await Task.Delay(500); Console.WriteLine("Data loaded"); }; loader.Load(); Console.WriteLine("Finished"); Console.ReadLine(); } } در این پیاده‌سازی هم از async void و هم از event سنتی استفاده شده که باعث مشکل در مدیریت خطا و زمان‌بندی اجرا می‌شود. سؤال: در این طراحی چه Anti Pattern مهمی وجود دارد و امضای متد/ایونت‌ها را چگونه باید اصلاح کنید تا هم بتوانید خطاهای ناهمگام را مدیریت کنید و هم اجرای ناهمگام به‌شکل قابل پیش‌بینی عمل کند؟ 🔖 #CSharp #سی_شارپ 👤 Developix 💎 Channel: @DevelopixCSharp
547
14
👩‍💻👨‍💻 در کد زیر به رفتار String Interning در C# و مقایسه‌ی رفرنس‌ها با ReferenceEquals توجه کنید. خروجی این برنامه (سه خ
👩‍💻👨‍💻 در کد زیر به رفتار String Interning در C# و مقایسه‌ی رفرنس‌ها با ReferenceEquals توجه کنید. خروجی این برنامه (سه خط روی Console) دقیقا چه خواهد بود؟ خروجی را به‌همان شکل Console (با True/False و رشتهٔ نهایی) بنویسید. 🔖 #CSharp #سی_شارپ 👤 Developix 💎 Channel: @DevelopixCSharp
535
15
‏استفادهٔ تمیز از Dependency Injection در ASP.NET Core ⚙️ یکی از ساده‌ترین ولی مهم‌ترین نکته‌ها در ASP.NET Core این است که در DI همیشه با Interface کار کنیم، نه کلاس‌های پیاده‌ساز. همین تغییر کوچک، تست‌پذیری و انعطاف سیستم را چند برابر می‌کند. 💡 وقتی مستقیم به کلاس&nbsp;Concrete وابسته می‌شویم: public class PaymentService { private readonly SqlOrderRepository _repository; public PaymentService() { _repository = new SqlOrderRepository(); } public void Pay(int orderId) { var order = _repository.Get(orderId); // ... } } اینجا: • PaymentService به یک کلاس خاص قفل شده 🔒 • تعویض دیتابیس یا Mock کردن در Unit Test سخت و پرهزینه می‌شود. حالت تمیزتر با Interface و DI Container: public interface IOrderRepository { Order Get(int id); } public class SqlOrderRepository : IOrderRepository { public Order Get(int id) { // query DB } } public class PaymentService { private readonly IOrderRepository _repository; public PaymentService(IOrderRepository repository) { _repository = repository; } public void Pay(int orderId) { var order = _repository.Get(orderId); // ... } } ثبت در ASP.NET Core DI Container: builder.Services.AddScoped<IOrderRepository, SqlOrderRepository>(); builder.Services.AddScoped<PaymentService>(); حالا PaymentService فقط قرارداد را می‌شناسد (IOrderRepository) و دیگر اهمیتی ندارد پشت صحنه Sql است، In-Memory است یا یک Web API دیگر. این یعنی loosely coupled بودن، مطابق اصل D از SOLID (Dependency Inversion). ✅ برای Unit Test هم می‌توانیم خیلی راحت یک Fake/Mock تزریق کنیم: public class FakeOrderRepository : IOrderRepository { public Order Get(int id) { return new Order { Id = id, Total = 100_000 }; } } var service = new PaymentService(new FakeOrderRepository()); این الگوی کوچک در کل لایه‌های پروژه (Application, Infrastructure, UI) کمک می‌کند وابستگی‌ها را از بالا به پایین طراحی کنیم و معماری‌هایی مثل Clean Architecture را راحت‌تر پیاده کنیم. برای مطالعهٔ بیشتر: Microsoft Docs - Dependency injection in ASP.NET Core از همین امروز در سرویس‌ها و Controllerهای جدید فقط Interfaceها را تزریق کن و کم‌کم بقیه را هم به این الگو مهاجرت بده؛ نتیجه‌اش کد تمیزتر و تغییرپذیرتر است. 🚀 🔖 #CSharp #سی_شارپ #C# #ASP_NET_Core #Dependency_Injection #SOLID #Clean_Code 👤 Developix 💎 Channel: @DevelopixCSharp
571
16
اصل SRP در Controllerهای ASP.NET Core 🎯 یکی از ساده‌ترین راه‌ها برای تمیزتر شدن کد در ASP.NET Core این است که Controller را لاغر نگه داریم و Single Responsibility Principle (SRP) را جدی بگیریم. SRP می‌گوید هر کلاس فقط یک دلیل برای تغییر داشته باشد. ولی در بسیاری از پروژه‌ها، Controller هم درخواست را هندل می‌کند، هم Validation می‌کند، هم Business Logic دارد، هم با Database حرف می‌زند و هم Log می‌گیرد 😅 نتیجه؟ کدی که تست‌نشدنی، سخت‌خوان و پر از Bugهای پنهان است. نمونهٔ ضدالگو (Controller چاق) 🚫 public class OrdersController : ControllerBase { private readonly AppDbContext _db; public OrdersController(AppDbContext db) { _db = db; } [HttpPost] public async Task<IActionResult> Create(CreateOrderDto dto) { if (string.IsNullOrWhiteSpace(dto.CustomerName)) return BadRequest("CustomerName is required"); var order = new Order { CustomerName = dto.CustomerName, TotalAmount = dto.TotalAmount, CreatedAt = DateTime.UtcNow }; if (order.TotalAmount <= 0) return BadRequest("Invalid amount"); _db.Orders.Add(order); await _db.SaveChangesAsync(); return Ok(order.Id); } } این Controller هم Validation می‌کند، هم Domain Rule، هم Data Access؛ حداقل سه مسئولیت مختلف در یک کلاس 👎 بهبود با Service + SRP ✅ Controller فقط باید: • ورودی/خروجی HTTP را مدیریت کند. • درخواست را به یک Service بدهد. • نتیجه را به Response تبدیل کند. public interface IOrderService { Task<int> CreateAsync(CreateOrderDto dto); } public class OrderService : IOrderService { private readonly AppDbContext _db; public OrderService(AppDbContext db) { _db = db; } public async Task<int> CreateAsync(CreateOrderDto dto) { if (string.IsNullOrWhiteSpace(dto.CustomerName)) throw new ArgumentException("CustomerName is required"); if (dto.TotalAmount <= 0) throw new ArgumentException("Invalid amount"); var order = new Order { CustomerName = dto.CustomerName, TotalAmount = dto.TotalAmount, CreatedAt = DateTime.UtcNow }; _db.Orders.Add(order); await _db.SaveChangesAsync(); return order.Id; } } و حالا Controller لاغرتر: [ApiController] [Route("api/[controller]")] public class OrdersController : ControllerBase { private readonly IOrderService _orderService; public OrdersController(IOrderService orderService) { _orderService = orderService; } [HttpPost] public async Task<IActionResult> Create(CreateOrderDto dto) { try { var id = await _orderService.CreateAsync(dto); return Ok(id); } catch (ArgumentException ex) { return BadRequest(ex.Message); } } } حالا: • تست Unit روی IOrderService بدون WebHost و بدون HTTP کاملاً ساده است ✅ • Controller فقط یک مسئولیت دارد: تبدیل HTTP به فراخوانی Service و برعکس. • وقتی Business Rule عوض شود، فقط Service را لمس می‌کنید، نه Controller و نه Routing. برای مطالعهٔ بیشتر: Microsoft Learn - Controllers روی همین ایده در بقیهٔ Controllerها هم کار شود، ساختار پروژه تمیزتر، قابل‌تست‌تر و آمادهٔ رشد در سطح Enterprise می‌ماند 🚀 🔖 #CSharp #سی_شارپ #C# #_NET #ASP_NET_Core #Clean_Code #SRP #Architecture 👤 Developix 💎 Channel: @DevelopixCSharp
493
17
کتابخونهٔ Polly یکی از مهم‌ترین ابزارها برای ساختن سرویس‌های رزیلینت تو دات‌نت هست 🚀 با Polly می‌تونی روی callهای I/O مثل HTTP، دیتابیس یا message broker به‌سادگی policyهایی مثل Retry، Circuit Breaker، Timeout و Fallback اعمال کنی؛ بدون این‌که پر از try/catch تکراری بشه. 👍 موارد استفادهٔ روزمره: - Retry خودکار روی خطاهای موقتی (مثل 5xx) - قطع موقت callها به سرویس مشکل‌دار (Circuit Breaker) - تعریف Timeout منطقی برای HttpClient نمونهٔ استفاده در ASP.NET Core با HttpClient: builder.Services.AddHttpClient("api") .AddPolicyHandler(Policy .HandleResult<HttpResponseMessage>(r => !r.IsSuccessStatusCode) .WaitAndRetryAsync(3, retry => TimeSpan.FromSeconds(2))); این کار هم کد رو تمیزتر می‌کنه، هم رفتار خطاها قابل پیش‌بینی و تنظیم‌پذیر می‌شه، مخصوصاً تو microservices و سیستم‌های توزیع‌شده 💡 لینک‌ها: GitHub Docs امتحانش کن روی HttpClient یا callهای حساس و کم‌کم policyهای خودت رو بساز 🌱 🔖 #CSharp #سی_شارپ #CSharp #Polly #_NET #Resilience #ASP_NET_Core 👤 Developix 💎 Channel: @DevelopixCSharp
453
18
⚡ استفاده درست از ‎ConfigureAwait(false)‎ در C# یکی از ریزه‌کاری‌های مهم در کد async/await اینه که بدون نیاز، کانتکست سنکرون‌سازی (SynchronizationContext) رو نگه نداریم. این کار تو سرویس‌ها و کتابخانه‌ها باعث بهبود کارایی و جلوگیری از Deadlock می‌شه. 💡 تو اپ‌های غیر UI (مثل ASP.NET Core) توی لایه‌های داخلی معمولاً نیازی به برگردوندن execution به همون کانتکست اولیه نیست؛ پس می‌شه از ‎ConfigureAwait(false)‎ استفاده کرد. public async Task<UserDto> GetUserAsync(int id) { var entity = await _dbContext.Users .AsNoTracking() .FirstOrDefaultAsync(u => u.Id == id) .ConfigureAwait(false); if (entity is null) return null; return new UserDto { Id = entity.Id, Name = entity.Name }; } ✅ نکته‌ها: • در UI (WPF/WinForms/Maui) تو کدی که بعد از await به UI دسترسی داره، از ‎ConfigureAwait(false)‎ استفاده نشه. • در لایه‌های زیرین (Repository، Service، Client ها) استفاده از ‎ConfigureAwait(false)‎ معمولاً انتخاب خوبیه. برای مطالعه بیشتر: Microsoft Docs - Asynchronous programming 🔖 #CSharp #سی_شارپ #CSharp #ConfigureAwait #AsyncAwait #BestPractice #Performance #_NET 👤 Developix 💎 Channel: @DevelopixCSharp
404
19
ویراک کلود | تجربه‌ی ابری بدون محدودیت ☁️🚀 🎁 ۲۰٪ شارژ هدیه روی اولین واریزی مزیت‌هایی که واقعاً فرق می‌سازن: ⚡️ پهنای باند
ویراک کلود | تجربه‌ی ابری بدون محدودیت ☁️🚀 🎁 ۲۰٪ شارژ هدیه روی اولین واریزی مزیت‌هایی که واقعاً فرق می‌سازن: ⚡️ پهنای باند 980 مگ 🌐با IP مازاد ⏱️ راه‌اندازی فوری 💳 پرداخت ساعتی 🛡 پشتیبانی ۲۴/۷ 💬 هر سوالی داشتی، تیم ما کنارتـه ✅ مناسب استارتاپ‌ها، تیم‌های فنی، تا سازمان‌های بزرگ همین الان شروع کن و با حداکثر منابع، سریع‌تر رشد کن 👇🏻 📞 تماس سریع: 02191555530 🔗 https://virakcloud.com
343
20
در نمونه‌کد بالا در نسخه‌ی اشتباه، به‌جای استفاده از LINQ و عملگرهای آماده برای حذف عناصر تکراری، به‌صورت دستی روی لیست حلقه+1
در نمونه‌کد بالا در نسخه‌ی اشتباه، به‌جای استفاده از LINQ و عملگرهای آماده برای حذف عناصر تکراری، به‌صورت دستی روی لیست حلقه زده شده و برای هر آیتم یک Any() جداگانه روی result صدا زده شده است؛ این کار در سناریوهایی که تعداد رکوردها زیاد است، باعث پیچیدگی زمانی O(n²)، افزایش فشار روی GC و کاهش کارایی می‌شود. در نسخه‌ی اصلاح‌شده با استفاده از GroupBy و انتخاب آخرین آیتم هر گروه (براساس Timestamp)، هم کد خواناتر شده و هم فقط یک بار روی مجموعه اصلی پیمایش انجام می‌شود که در سناریوهای پردازش لاگ یا Events حجیم، مصرف CPU را به‌طور محسوسی کاهش می‌دهد. کدام رویکرد را برای سناریوهای Real-World با حجم داده بالا منطقی‌تر می‌دانید و چرا در Collections بزرگ، پرهیز از حلقه‌های تو در تو (Nested) تا این حد اهمیت دارد؟ 🔖 #CSharp #سی_شارپ 👤 Developix 💎 Channel: @DevelopixCSharp
662