분류 전체보기 233

[.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

[SQL] Inner Join에서 조인 조건이 같을 시, 테이블 순서의 영향이 있을까?

1. 개요 SQL에서 Inner Join을 수행할 때, 조인 조건이 동일한 경우 테이블의 순서를 바꿔도 쿼리 결과는 동일하다. Inner Join은 두 개 이상의 테이블을 공통된 열을 기준으로 결합하는 연산이다. 조인 조건이 동일하다면 어떤 테이블을 먼저 명시하더라도 결과는 동일하게 나타난다. 2. 예제 예를 들어, A, B, C라는 세 개의 테이블이 있다고 가정해보자. 각각의 테이블은 다음과 같은 구조를 가지고 있다. 테이블 A: id | name | age ---+--------+----- 1 | John | 30 2 | Sarah | 25 테이블 B: id | address | city ---+-------------+------- 1 | 123 Main St | NY 2 | 456 Elm St |..

DataBase 2023.07.10

[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# ASP.NET에서 JavaScriptSerializer maxJsonLength 초과 에러 발생 해결

1. 발생현상 C# ASP.NET 4.6.1버전으로 웹페이지를 개발하던 중, View에서 요청한 데이터를 Controller에서 리턴해주는 과정에서 다음과 같은 오류가 발생했다. 이는 기본 Json 응답 크기 제한(ASP.NET 4.6.1버전 기준 - 4MB)을 넘어선 데이터를 응답하려 해서 발생한 에러이다. 이를 해결하기 위한 여러 방안은 다음과 같다. maximum JSON response size를 증가시킨다 - Controller에서 더 큰 JSON응답을 반환할 수 있도록 설정을 수정해주는 방법이다. 페이지 매김 또는 데이터 필터링을 구현한다. - 큰 크기의 데이터를 요청하는 대신 특정 부분을 조회할 수 있게 해주어, 응답하는 데이터의 크기를 간소화하는 방법이다. JSON 응답 데이터를 압축시킨다..

HackerRank 문제풀이 - 10 (Two Strings)

1. 문제 문제는 다음과 같다. 두 string이 주어졌을때, 공통되는 문자가 있으면 “YES”, 없으면 “NO” 를 출력해야 한다. 2. 1차 문제풀이 2.1 풀이 과정 function twoStrings(s1, s2) { // Write your code here const splitS1 = s1.split(""); const splitS2 = s2.split(""); var result = false; splitS1.forEach((char)=>{ if(splitS2.indexOf(char) !== -1){ result = true; return; } }) return result? "YES": "NO"; } 풀이 과정은 다음과 같다. “result” 변수를 false로 초기화한다. 주어진 두 문자..

HackerRank 문제풀이 - 9 (Hash Tables: Ransom Note)

1. 문제 문제 구조는 다음과 같다. 주어진 두 A, B string 배열을 비교하여, A배열에서 단어를 완벽히 사용하여 B 배열의 문장을 완성할 수 있는지 확인하여, 그 여부를 출력하는 간단한 문제이다. 2. 문제 풀이 2.1 풀이 과정 function checkMagazine(magazine, note) { // Write your code here var result = true; note.forEach(str =>{ const idx = magazine.indexOf(str); if(idx == -1){ result = false; return; } else { magazine.splice(idx, 1); } }); console.log(result? "Yes": "No"); } 풀이 과정은 다음..

HackerRank 문제풀이 - 8 (Array Manipulation)

1. 문제 1부터 시작하는 인덱스가 지정된 배열과 연산 목록이 주어진다. 각 연산은 시작 인덱스와 끝 인덱스 사이에 속한 배열 요소에 일정한 값을 더하는 작업이다. 연산을 모두 수행한 후, 배열에서 가장 큰 값을 찾아 반환해야 한다. 2. 1차 문제풀이 2.1 풀이 과정 function arrayManipulation(n, queries) { // Write your code here const listLength = queries.length; console.log("n:", n); console.log("queries:", queries); console.log("listLength:", listLength); let resultList = []; for(let i = 0; i < n; i ++){ ..

반응형