목록분류 전체보기 (157)
Coding Memo
Canvas 아래 몇백개의 오브젝트가 있을 경우 렉이 걸릴 위험이 크다! (당연하지만) UI의 transform 변경, UI에 대한 animation 적용, hierachy에 추가 및 수정 등의 레이아웃이 변동되는 Dynamic UI Component에 대해서는 Canvas를 따로 분리하는 것이 성능 향상에 도움이 된다. Canvas에서 UI 요소가 추가/삭제되거나 transform에 변경이 일어날 때, Canvas에 있는 모든 UI 요소에 대해 재배치가 일어나게 된다. 즉, Canvas에 많은 UI 요소가 있을 경우 모두 재배치가 빈번하게 일어날 수 있고 이는 성능 저하를 유발할 수 있다. 이에 대해 Canvas를 따로 분리하는 방법이 있다. 따라서 다음과 같은 경우에 Canvas를 분리하여 사용하자...
Summary SetMinThreads로 Worker Thread의 최소 수를 지정할 때는 SetMaxThreads로 최대 수도 함께 지정해주어야 한다. (그 역도 마찬가지이다.) 그렇지 않으면 System의 default 값이 적용된다. 코드를 테스트하다가 우연히 알게 되었다. SetMaxThreads로 worker 쓰레드 수를 한정하고 초과 개수의 쓰레드를 돌려도 잘 돌아가는 현상을 보고 ‘뭐지…’ 하고 한참을 찾아보고 테스트 해보다가 해결했다. using System; using System.Threading; namespace Test { class Program { static void Main(string[] args) { ThreadPool.SetMinThreads(1, 1); ThreadP..
Summary 자료형에 따라 call by reference 인지, call by value인지 결정되는데, 직접 전달 방식을 정할 수도 있다. call by value: 값을 복사하여 사용 call by reference: 값을 참조하여 사용 Value Type: 기본 자료형 (int, float, char), struct, … Reference Type: Class (string …), Action, … Variable Data Type Call By 매개변수에서 참조하는 개체 상태 수정 - 호출자 표시 여부 매개 변수에 다른 객체를 참조하여 할당 - 호출자 표시 여부 Value value X X reference (ref) O X Reference value O X reference (ref) O ..
매개 변수 앞에 한정자를 붙여 전달 방식을 지정할 수 있다. ref 인수 할당 필요, 매개 변수를 다른 개체로 재할당 가능 in 인수 할당 필요, read only out 인수 할당이 필수가 아님, 대신 호출된 메서드에서는 이 매개 변수에 값을 반드시 할당 해야함 params: 매개 변수의 개수를 가변으로 지정 ex) int Add(params int[] nums) out은 Try~~(out ~~) 함수를 생각하면 이해하기 편할 것이다. ex) TryGetValue(), TryGetComponent() … ref는 C의 포인터나 참조로 생각하면 쉽다. out은 C언어 함수에서 값을 할당하는 인자로 생각하면 쉬울거 같은데 값 할당이 필수가 아닌 C와 달리 C#에서는 out 키워드가 있으면 반들시 값을 할당..
변수에 넣는 값을 리터럴이라고 한다. (= 메모리에 저장되는 값) int a = 1; 위 코드에서 리터럴은 1이 된다. C++ 에서의 여러가지 타입에 대한 리터럴 표기법 * 1를 표시한다고 했을 때, 형식 리터럴 int 1 unsigned int 1u long 1l unsigned long 1ul double 1.0 float 1.0f long double 1.0l 이 외에도 2진수, 8진수, 16진수 표기법이 각각 따로 있다. (2진수는 C++11 부터) 형식 접두사 예시 2진수 0b, 0B 0b1110 8진수 0 015 16진수 0x, 0X 0XAABB00 주의: 접두사 이후에 나오는 숫자나 문자는 당연히 해당 형식에 포함된 숫자나 문자여야 한다! (아니면 오류가 날 것이다.) Tip : 조금 긴 숫..
C++에서 자신이 사용할 클래스를 템플릿화 시켜서 코드를 작성했다고 하자. 다음과 같은 코드가 있다. (별 의미가 없는 클래스이다) #pragma once template class MyData { public: int size() { return _data.size(); } void addData(T t) { _data.push_back(t); } vector data() { return _data; } private: vector _data; }; 이 클래스를 main함수가 포함되어 있는 파일에 추가하거나 다음과 같이 헤더파일을 include하여 main에서 사용하면 문제가 없다. 오류 없이 '10'이 제대로 출력되고 프로그램이 종료될 것이다. #include "MyData.h" int main() ..
Rockiss님의 게임 서버 강의에서 학습한 내용과 몇몇 인터넷 검색을 통해 정리하였다. Select WSAAsyncSelect WSAEventSelect Overlapped (event) Overlapped (callback) IOCP Async/Sync IO Sync IO Sync IO Sync IO Async IO Async IO Async IO Select Pros - 윈도우 뿐만 아니라 Linux 계열에서도 사용이 가능함 (이식성 우수) Cons - 호환성이 높은 만큼 성능이 다른 모델 보다 좋지 않음 (매번 fd_set 등록 필요) - 한번에 64개의 소켓까지 사용 가능 (FD_SETSIZE = 64) Methods 1. fd_set 초기화 (FD_ZERO) 2. socket 등록 (FD_SE..
본 포스팅은 인프런에 등록되어 있는 Rockiss 님의 강의를 보고 간단하게 정리한 글입니다. 이전에 나왔던 Select, Overlapped(event), Overlapped(callback)들은 장점도 있었지만 단점도 많은 기능이었다. 일반 비동기 호출: 매우 보기 불편해보이는 중첩 무한 반복문 Select: FD_SET 당 최대 64개 한정, 매번 set을 만들어줘야함, 완전한 비동기 방식이 아님, 성능 좋지 않음 WSAEventSelect: 한번에 소켓 64개 제한 Overlapped(event): 소켓과 이벤트를 1:1로만 대응시킴, 한번에 소켓 64개 한정(overlapped) Overlapped(callback): 매번 Alertable Wait 상태를 만들어야되는 시스템적 부담(OS에 의해..