c# long과 double의 메모리 크기
레퍼런스에 보면 정수형의 크기는 비트로 나와 있고 실수형의 그것은 바이트로 나와 있다. 서로 단위가 다르게 나와 있어서 헷갈릴 수 있는데 long과 double이 차지하는 메모리의 크기는 서로 같다.
레퍼런스에 보면 정수형의 크기는 비트로 나와 있고 실수형의 그것은 바이트로 나와 있다. 서로 단위가 다르게 나와 있어서 헷갈릴 수 있는데 long과 double이 차지하는 메모리의 크기는 서로 같다.
프로세스들 사이에서 대이터를 주고 받아야 할 때가 있다. 예를 들어 이런 경우에 쓸모 있다. ls증권의 api를 이용한 애플리캐이션은 32 비트로만 빌드를 할 수 있다. 32 비트 애플리캐이션은 메모리를 원칙적으로 2gb까지 이용할 수 있으며 변칙적으로 4gb까지도 가능하다. 사실적으로는 3gb 정도까지 쓸 수 있다. 이는 커다란 제약이다. 위의 api로 32 비트 서버 애플리캐이션을 만들고 64 비트 클라이언트…
const로 선언하면 상수가 속한 클래스의 인스턴스를 만들지 않고도 다른 클래스에서 상수를 읽을 수 있다. 위 예제에서 Form2의 인스턴스를 만들든 만들지 않든 상수의 값은 바뀌지 않는다. 따라서 그냥 읽을 수 있게 한 거다. 기술적으로 설명하면 상수는 static으로 선언한 셈이다. 그래서 static으로 선언할 수 없다. 이미 선언되어 있기 때문이다. The static modifier isn’t allowed in a constant…
위 코드에서 ChildClass의 인스턴스는 두 개 생긴다. parentClass.ChildClass는 ParentClass parentClass = new()로 parentClass가 만들어질 때 parentClass의 컨스트럭터가 생성하고 childClass는 ChildClass childClass = new(parentClass)로 만들어진다. parentClass.ChildClass와 childClass는 부모 클래스는 parentClass로 같다. 하나의 부모 클래스 아래에 두 개의 서로 다른 자식 클래스들이 있는 거다.
아래의 코드에서 TestMethod1는 멀티 뜨레드에서 작동한다. 이 메떠드는 다른 뜨레드에서 실행되는 메떠드와 동기화되어야 한다. 그러면서 await도 해야 한다. await를 lock 블록 안에서 쓰면 오류로 처리된다. 만약 await가 긴 시간을 쓴다면 lock이 걸린 다른 뜨레드는 그 시간을 기다려야 하기 때문이다. 이러면 멀티 뜨레드를 쓰는 의미가 줄어든다. 아래의 코드처럼 lock 블록 안에서 네스티드 메떠드를 만들어 await를 쓰면…
DateTime은 날짜와 시간을 모두 값으로 갖고 DateOnly는 날짜만 TimeOnly는 시간만 갖는다. 하루 안에서 시간들을 연산하려면 TimeOnly를 쓰는 게 편하다. TimeOnly를 이용할 때 주의해야 할 게 있다. 아래 코드는 -00:00:01을 반환하지 않는다. Because TimeOnly only represents a 24-hour period, it rolls over forwards or backwards appropriately when adding values supplied to those three methods.How to use the DateOnly…
synchronous는 ‘순서대로 처리한다’는 뜻이다. 반대말은 앞에 부정 접두사 a가 붙어서 asynchronous다. ‘동시에 처리한다’는 의미다. 멀티 뜨레드를 이용하면 동시 처리를 할 수 있으니 멀티 뜨레드는 asynchornous하다. 그러나 async가 곧 멀티 뜨레드를 이용한다는 건 아니다. async가 멀티 뜨레드와 같은 거라면 굳이 따로 있을 리가 없다. async는 작업을 매인 뜨레드에서 처리하면서 마치 멀티 뜨레드를 이용하는 것처럼 보이게 하는…
클래스 리스트를 DataGridView에 연결하여 리스트 아이템의 필드가 바뀐 때 후자에 반영되게 하려면 INotifyPropertyChanged.PropertyChanged 이벤트를 써야 한다. 이거는 원칙적으로 클래스의 각 필드에 구현을 해야 한다. 많이 번거롭고 코드도 길어진다. 더 편하게 하려면 클래스 리스트를 쓰지 않고 아예 DataTable을 이용한다. 하지만 이건 클래스 리스트보다 느리다. 변칙적인 방법인데 ObservableObject를 이용하면 클래스 리스트를 이용해서도 쉽게 구현할 수 있다. 이걸…
전에는 멀티 뜨레드를 이용할 때 thread나 ThreadPool을 이용했지만 요샌 task를 쓴다. task로 새 뜨레드를 만들 땐 run이나 StartNew를 이용한다. 전자가 더 편하고 빠르다. run을 이용하면 새로운 뜨레드로 실행할 메떠드를 그대로 쓸 수 있다. 하지만 람다식을 써야 한다. StartNew로 하려면 대상 메떠드가 패러미터로 object만 받을 수 있다. 이걸 다시 타입캐스트해서 써야 하므로 번거롭다. 지나치게 간결한 건…