본문 바로가기
가중치에 따른 랜덤 값 뽑기 가중치에 따른 랜덤 값 뽑기 🎲게임 서버나 애플리케이션 개발 시, 특정 항목을 랜덤하게 선택해야 할 경우가 종종 있다.그럴때 각 항목에 가중치를 부여해서 확률적으로 선택되는 방법이 매우 유용하다. 예를 들면 항목 A가 45%, B가 35%, C가 15%, D가 5%로선택되게 하는 방법이다. 이 포스트에서는 C# Random.Shared를 사용하여 어떻게 가중치 기반 랜덤 값을 뽑는지 설명하려 한다. 🎯  일단 가중치란 무엇을까? 🤔 **가중치(Weight)**는 각 항목이 선택될 확률을 상대적으로 조정하는 수치이다.예를 들어, A 항목이 45%, B 항목이 35%, C 항목이 15%, D 항목이 5%의 가중치를 가지고 있다면,A가 선택될 확률이 가장 높고, D는 상대적으로 가장 낮다.가중치는 확률을.. 2024. 11. 15.
Incremental Source Generator 🖥️ Incremental Source Generator 란?- .NET 5 이후의 기능으로, 컴파일 타임에 코드 생성을 최적화 하고 성능을 향상시키기 위해 도입된 기술 - 기존의 소스 생성기보다 더 효율적이고 부분적으로 코드 생성을 수행할 수 있는 기능 제공  주요 개념  1. Incremental Source Generation- 코드 생성을 부분적으로 수행하여, 변경된 부분만 다시 생성- 전체 코드 베이스를 다시 분석하지 않고 변경된 입력에 대해서만 반응, 더 효율적인 코드 생성 가능 2. Performance- 대규모 코드베이스에서 소스 생성기의 성능을 크게 향상 시킴- 반복적인 빌드 및 변경 작업에서 유용 3. Diagnostics - Incremental Source Generator는 진단.. 2024. 8. 7.
MemoryPack 라이브러리 개요 - MemoryPack은 Cysharp라는 일본의 소프트웨어 개발 회사에서 개발한 고성능 C# 직렬화 라이브러리 MemoryPack 라이브러리- .NET에서 사용되는 고성능 메모리 패킹 및 직렬화 라이브러리- 게임 개발이나 고성능 애플리케이션에서 자주 사용됨.- 직렬화와 역직렬화작업을 빠르고 효율적으로 처리, .NET 최신 기능 활용  특징 1. 고성능- MemoryPack은 빠르고 효율적인 직렬화/역직렬화 성능 제공 2. 간단한 사용 방법- 직렬화할 클래스에 `MemoryPackable` 특성을 적용하고  `partial` 클래스를 정의하면 사용 가능  3.소스 생성기 - .NET의 소스 생성기 기능을 사용하여 컴파일 타임에 직렬화 및 역직렬화 코드를 자동으로 생성 4. 최신 C# 기능 지원 - .. 2024. 8. 7.
[C#] Global Using 1. global using - global using은 C# 10에서 도입된 새로운 기능- 네임스페이스를 전역적으로 사용할 수 있도록 하는 키워드- 이를 통해 모든 파일에서 공통으로 사용하는 네임스페이스를 매번 using 구문으로 선언할 필요 없이 한 번에 선언할 수 있음-  만약 global using문과 일반 using 문이 혼합되어 있는 경우에는, 모든 global using문이 일반 using 문 앞에 선언되어야함.  // GlobalUsing.cs 파일global using System;global using System.Text;global using System.IO;  2. global using static  - using static은 타입(type)을 import 하여 해당 타입 안.. 2024. 8. 5.
오버헤드 🖥️ 오버헤드(OverHead)OverHead 는 시스템의 리소스를 소모하면서도 실제 작업의 주요 성능에 기여하지 않는 추가적인 비용이나 부하를 의미. 컴퓨터 과학에서 오버헤드는 다양한 맥락에서 발생할 수 있음.  요약 : 리소스를 소모하는 추가적인 비용이나 부하 오버헤드의 종류  1. 함수 호출 오버헤드- 함수 호출 시 스택 관리, 레지스터 저장 및 복원, 프로시저 호출 등의 추가적인 작업 때문에 발생하는 비용 ex) - 스택 프레임 생성 및 제거 : 함수 호출 시 현재 함수의 상태를 스택에 저장하고, 호출된 함수의 스택 프레임을 생성: 함수가 종료되면 프레임 제거하고, 이전 함수의 상태를 복원  - 파라미터 전달: 함수 호출 시 인자들을 스택이나 레지스터를 통해 전달  - 프로시저 호출 및 반환: .. 2024. 7. 31.
비동기에서[async/await] lock 사용하기 SemaphoreSlim 클래스를 사용하면 비동기에서 lock을 사용할 수 있다.  AsyncLock.cs namespace Common;public sealed class AsyncLock{ // 한번에 하나의 스레드만 접근 가능하도록 설정되어, 사실상 뮤텍스처럼 동작한다. private readonly SemaphoreSlim _semaphore = new SemaphoreSlim(1, 1); // 동시 실행 제한 수 3 //private readonly SemaphoreSlim _semaphore = new SemaphoreSlim(3); public async Task LockAsync() { await _semaphore.WaitAsync(); .. 2024. 7. 11.