Language/C# 10

[C#] iteration 안에 await문을 넣으면 안되는 이유

await 키워드를 for 루프 내부에서 사용하면 예상치 못한 동작 또는 오류가 발생할 수 있다. 특히 UI 애플리케이션이나 비동기 코드와 같은 특정 상황에서는 더욱 그렇다. 이는 await 키워드가 비동기 작업이 완료될 때까지 함수의 실행을 일시 중단하는 데 사용되기 때문이다. 부적절하게 사용하면 루프가 의도치 않은 방식으로 작동할 수 있다. 다음은 잘못된 코드의 예시이다: async Task ProcessItemsAsync(List items) { for (int i = 0; i < items.Count; i++) { ... // 비동기 작업(예: HTTP 요청)을 대기한다. await SomeAsyncMethod(); ... } } 위의 예에서는 루프 내에서 비동기 작업을 대기하면 해당 작업이 완료..

Language/C# 2024.01.18

[.NET] Garbage Collector의 영향과 Timer 클래스의 안전한 사용 방법

이 포스트에서는 C#에서 Garbage Collector의 영향과 이에 따른 Timer클래스의 안전한 사용 방법에 대해 정리해보고자 한다. Garbage Collector(GC)의 역할 Garbage Collector는 .NET Framework에서 메모리 관리를 자동화하는 중요한 요소이다. GC는 더 이상 사용되지 않는 객체들을 감지하고 이들을 메모리에서 해제하여 리소스 누수를 방지한다. 하지만 때때로 GC의 작동 방식으로 인해 예상치 못한 결과가 발생할 수 있다. 특히 Timer 클래스와 같이 주기적으로 호출되어야 하는 기능을 구현할 때에 주의가 필요하다. Timer 클래스의 일반적인 사용 방법과 GC의 영향 보통 Timer클래스를 사용하여 반복적인 작업을 수행하도록 프로그램을 구현할 수 있다. 예를..

Language/C# 2023.07.20

[.NET] System.Threading.Timer Class에 대해

해당 포스팅은 Timer Class의 공식문서를 직접 번역하면서, 부연설명을 추가하여 작성한 포스팅이다. 정의 Namespace: System.Threading Assembly: System.Runtime.dll 지정된 간격으로 thread pool thread에서 메서드를 실행하기 위한 메커니즘을 제공한다.이 클래스는 상속할 수 없다. *(스레드 풀이란? 이전 포스팅 참고) public sealed class Timer : MarshalByRefObject, IAsyncDisposable, IDisposable Inheritance Object → MarsharByRefObject → Timer Implements IDisposable, IAsyncDisposable 예제 다음 예제에서는 시그니처가 T..

Language/C# 2023.07.20

[.NET] Thread Pool에 대해 이해하기

C# .NET에서 비동기 작업을 효율적으로 처리하는 방법 중 하나는 ThreadPool을 사용하는것이다. 이 포스팅에서는 C# .NET에서 Thread Pool의 개념과 활용 방법에 대해 중점적으로 다뤄보려고 한다. Thread Pool이란? Thread Pool은 C# .NET에서 비동기 작업을 처리하기 위해 사용되는 기능이다. 기본적으로는 미리 생성된 작업자 스레드(worker thread)의 풀을 유지하면서, 작업이 들어오면 이 작업자 스레드들이 비동기적으로 작업을 처리한다. 스레드 생성과 스레드 소멸에 따른 오버헤드를 피하고, 스레드를 재사용함으로써 성능을 향상시키는 장점을 가지고 있다. Thread Pool의 사용 이점 스레드 생성 및 소멸 오버헤드 감소: 미리 생성된 스레드 풀을 사용하여 스레..

Language/C# 2023.07.20

[.NET] Garbage Collector에 대해

C# .NET에서 메모리 관리는 개발자에게 큰 부담이 될 수 있다. 이러한 부담을 줄이기 위해 C# .NET은 자동 메모리 관리 기능인 Garbage Collector를 제공한다. 이 포스팅에서는 Garbage Collector의 개념과 작동 방식에 대해 알아보고, C#에서 메모리 누수를 방지하는 방법을 정리해보고자 한다. Garbage Collector란? Garbage Collector(GC)는 동적으로 할당된 메모리 중에서 더 이상 사용되지 않는 객체를 감지하고, 이러한 객체들의 메모리를 자동으로 해제하여 시스템 자원을 최적화하는 역할을 한다. 개발자는 메모리 해제를 명시적으로 관리할 필요가 없으며, GC가 대신 처리한다. Garbage Collector 작동 방식 Mark and Sweep 알고리..

Language/C# 2023.07.20

[C#] int형 변수끼리 나눗셈 결과 소숫점 이하 값이 버려지는 현상

JavaScript과 같은 동적 타이핑(dynamic typing)을 지원하는 언어를 사용하다가 C#으로 넘어와 개발하다보면 자료형에 대해 간과하다가 이슈가 생길 때가 있다 . 이번 포스팅에서는 int형 변수끼리 나눗셈 수행하면 소숫점 이하 값이 버려지는 현상과 그 이유에 대해 알아보자. 1. 문제 현상 C#에서 int현 변수끼리의 나눗셈을 수행하면 소숫점 이하 값이 버려지고, 정수 결과로 나타나는 경우가 있다. using System; public class Program { public static void Main() { int num1 = 3; int num2 = 2; Console.WriteLine("나눗셈 결과: " + num1 / num2); } } 위의 코드를 실행하면 결과는 '1'이 출력..

Language/C# 2023.07.02

[C#] Interlocked.Increment

1. 개요 C#으로 비동기 함수를 구현할때, 변수의 값을 증가시킬 때에 동기 함수를 구현했을때와는 다르게 Interlocked.Increment메서드를 사용하게 되어 이 메서드의 역할이 궁금해서 찾아보게 되었다. 2. Interlocked.Increment 메서드란? Interlocked.Increment 메서드는 원자적(atomic)인 증가 연산을 수행하는 메서드이다. 원자적 연산은 여러 스레드가 동시에 접근하여 값을 증가시키는 경우에도 데이터의 무결성을 보장하기 위해 사용된다. 3. Interlocked.Increment 메서드를 사용하는 이유 일반적으로 변수의 값을 증가시키는 연산은 여러 스레드에서 동시에 수행될 수 있다. 이 경우 여러 스레드가 동시에 값을 읽어 증가시킨 다음, 각각의 스레드가 업..

Language/C# 2023.05.29

[C#] Array와 List의 차이점, 각각을 어느 상황에 써야 할까?

개요 C#을 다루다 보니 배열을 사용할 때가 종종 생겼고, Array와 List를 알게되며 비슷한듯 차이점이 있는 두 컬렉션에 대해 알아보게 되던 중, 잘 정리된 외국 포스트가 있어서 직접 번역하여 포스팅하게 되었다. (원본 포스팅: https://www.shekhali.com/c-array-vs-list/) 1. Array vs List List는 요소가 추가되고 제거될 때 자동으로 크기를 조정할 수 있는 일반 컬렉션인 반면, Array는 같은 타입들의 요소에 대한 고정 크기의 순 컬렉션이다. Array C# Array: Array는 실행 중에 수정할 수 없는 고정 길이를 가진 동일한 데이터 타입의 엄격한 자료형*의 collections 이다. (*엄격한 자료형(strongly typed)란? 함수/메..

Language/C# 2023.01.28

[C#] Dictionary에 대해

1. Dictionary란? C#에서 Dictionary 클래스는 형식의 컬렉션이다. System.Collections에 정의되어 있으며 Key는 각 컬렉션에서 고유해야 한다. 이번 포스팅에서는 Dictionary 클래스의 기초적인 사용 방법 및 활용 예제를 소개한다. 2. Dictionary 클래스 사용법 2.1 클래스 사용 및 객체 생성 Dictionary 클래스를 사용하기 전에 using문에 System.Collections.Generic 네임스페이스를 추가한다. using System.Collections.Generic; Dictionary클래스는 형식이며 Key와 Value는 제네릭 유형이다. 다음은 Key가 string형이며, Value가 int형인 Dictionary객체를 생성하는 예제이다...

Language/C# 2023.01.28

[C#] 두 List가 같은지 비교하기

Except()를 사용하여 비교할 수 있다. var firstNotSecond = list1.Except(list2).ToList(); var secondNotFirst = list2.Except(list1).ToList(); 위의 firstNotSeconds는 list1에서 list2를 제외하여 리스트로 변환하고, secondNotFirst는 반대로 list2에서 list1를 제외하여 리스트로 변환한다. 그런 다음 아래와 같이 Any()메서드로 두 리스트가 비어있는지 확인하여 결과적으로 두 List가 같은지 비교할 수 있다. !firstNotSeconds.Any() && !secondNotFirsts.Any(); 이들을 다음과 같이 메서드로 구현할 수 있다. private bool getIsEqualT..

Language/C# 2022.10.30
반응형