c#

Programming/C# & Unity

C# perfmon 샘플 코드

internal class Program { const string CategoryName = "JangHyeong"; const string CounterName = "Test"; static private bool looping = true; // 1초마다 0~99 사이의 값으로 카운터를 남긴다. static void Loop() { var random = new Random(); var counter = new PerformanceCounter(CategoryName, CounterName, false); while (looping) { counter.RawValue = random.Next(100); Thread.Sleep(1000); } } static void Main(string[] args..

Programming/C# & Unity

C# 람다 클로저 원리

개요 C#의 람다식의 사용법과 어떻게 작동하는지 간략하게 정리한다. 람다 int number = 5; // input에 5를 더하여 리턴하는 익명 함수를 담은 변수 action. var action = (int input) => { return number + input; }; // 5 + 10이 리턴되어 15가 출력된다. Console.WriteLine(action(10)); // 출력: 15 위 코드에서 "(int input) => { return number + input; };" 구문을 람다 식이라고 부르며, 함수지만 이름이 없어서 무명 함수(메서드)라고도 부른다. 이때, 익명 함수 외부에서 가져온 변수 number를 캡처된 변수라고 부른다. 그리고 캡처가 완료되어 사용가능한 상태가 된 익명 함수..

Programming/C# & Unity

C# Foreach Closure

C#에서 람다를 사용하여 람다 밖에서 사용 중인 변수를 가져오면(캡처하면) 항상 레퍼런스로 전달되는 것 처럼 처리가 된다. (람다-클로저 관련 원리에 대한 간략한 포스팅) for (int i = 0; i { Thread.Sleep(1000); Console.WriteLine(i); }).Start(); } // 10이 10번 출력됨. 위의 경우에는 하나의 i가 10번 레퍼런스 전달되었고, 1초뒤에 forloop가 전부 끝나서 10이 된 i가 10번 출력되게 된다. 그렇다면 foreach를 사용하면 어떨까? foreach (int i in Enumerable.Range(1, 10)) { new Thread(() => { Thread.Sleep(1000)..

Programming/C# & Unity

C# 박싱

개요 흔히 면접 준비 때 박싱에 대해서 공부하게 된다. 하지만 실무에서는 거의 대부분 고려할 일이 없어서 시간이 지날수록 왜곡된 기억과 함께 여러 오해가 생기게 되었는데 관련해서 정리하려 한다. 박싱에 대하여 Stack에 있던 값을 Heap으로 옮기는 작업. 스택에 있는 값을 Heap으로 옮기면서, Heap에 메모리 할당, 값 복사가 일어나서 느리다. 더 자세한 내용은 구글에 C# 박싱을 검색.... int a = 5; object boxedA = a; Dictinary의 Key로 enum을 사용하면 안 되는가? .Net 4.0부터 Dictinary가 개선되어서 문제가 없어졌다. 이전에는 Dictinary 내부에서 Equal 함수를 사용하는데 이때, Enum 간 Equal 체크 시에 박싱이 일어나는 문제..

Programming/C# & Unity

C# Async Await 원리

개요 전에는 그냥 대충 [Async 함수를 호출하면 ThreadPool에서 Task를 하나 꺼내서 함수를 던져주겠지~]라고 생각했었다. 하지만 현실은 물론 그렇지 않았으며, 내부에서 신기하고 재미있는 일이 일어나고 있어서 포스팅을 남기려 한다. 예제 static class DBExecutor { static public async Task ExecuteDB(string spName, long accountId) { string result; Console.WriteLine($"DB 연결 시작"); await Task.Delay(2000); Console.WriteLine($"{spName} 호출 시작."); await Task.Delay(2000); Console.WriteLine($"{spName} 호..

Programming/C# & Unity

Unity UI에 Onclick 넣기

using UnityEngine.EventSystems; public class ClickAction : MonoBehaviour, IPointerClickHandler { public void OnPointerClick(PointerEventData eventData) { // OnClick code goes here ... } }출처 : https://stackoverflow.com/questions/40567303/onclick-event-for-image-in-unity 비슷한 방법으로 다른것도 추가가능

Programming/C# & Unity

유니티 RectTransform

UI와 몇몇 Object에서 사용되는 Rect Transform 컴포넌트. 기본적인 내용은 아래와 같이 사용하면 된다. RectTransform rt = (RectTransform)gameObject.transform // transform을 rectTransform형식으로 캐스트. rt.sizeDelta = new Vector2(10, 10); // Width와 Height를 수정. rt.anchoredPosition = new Vector2(0, 0); // anchored이후의 Position, 디테일 창의 포지션 값을 수정 rt.offsetMin = new Vector2(rt.offsetMin.x, bottom); // bottom 수정 rt.offsetMax = new Vector2(rt.off..

Programming/C# & Unity

C# 쓰레드 Lock

"N명의 유저들이 어떤 희귀 아이템을 얻기위해 눈에 불을 키고 아이템을 찾고있다.그 유저들은 아이템이 생기면 즉시 한개를 습득한다.이때 M개의 아이템을 운영자가 뿌렸을때!서로 같은 아이템을 가져가려고 하다가 충돌이 생기지 않을까?" 라는 고민을 쓰레드를 공부하다가 하게 되었다.그래서 이와 같은 내용을 구현해보니 아니나 다를까... 아이템을 5개를 생성시켜 줬지만, 로그에는 아이템을 가져간 흔적이 2개밖에 남지 않았다.이런 일을 막기위해서 다른 쓰레드에서도 사용하는 전역변수 같은 것들을 사용할 때, 잠시 Lock을 해두고 사용해야한다.사용법은 다음과 같이 매우 간단하다. // 전역 변수와 같은 방법으로 선언 private Object itemLock = new Object(); // 변수를 사용하기 전에 ..

Programming/C# & Unity

C# 폼 종료 함수 만들기

아래와 같이 메인 초기화 함수에 FormClosing에 핸들러를 더해주면, 폼이 꺼질때 아래의 함수가 작동된다.종료나 저장같은 이벤트를 넣어야할때 사용하면 될듯! public FormName() { FormClosing += new FormClosingEventHandler(closing); } private void closing(object sender, FormClosingEventArgs e) { // TODO LIST }

장형이
'c#' 태그의 글 목록