... | ... | @@ -15,7 +15,7 @@ |
|
|
|
|
|
* **large object heap :** 가비지 수집으로 살아남은 object가 이동되는데 이런 식의 가비지 수집은 대용량 객체에게는 부담이 된다. 이 때문에 CLR은 일정 크기 이상의 객체는 별도로 LOH(Large Object Heap)라는 특별한 heap에 생성한다. LOH에 할당된 객체는 가비지 수집이 발생해도 메모리 주소가 바뀌지 않는다. 이 때문에 LOH에 object를 생성/해제하다 보면 필연적으로 메모리 fragmentation현상이 발생한다. 또 다른 특징으로는 LOH에 생성된 object는 초기부터 2세대에 할당한다. 이 때문에 Full GC가 발생하지 않는 한 LOH의 객체는 수집 과정을 거치지 않는다.
|
|
|
|
|
|
* **root reference :** heap object를 참조하는 stack 변수, register, 또 다른 heap object를 root reference라고 한다.
|
|
|
* **root reference :** heap object를 참조하는 stack 변수, , 또 다른 heap object를 root reference라고 한다.
|
|
|
|
|
|
* **release resource :** 아래의 코드에서 fs.Close();를 주석처리한다면, 프로그램이 실행된 상태에서 FileCreate method를 벗어나도 ouput.log파일이 삭제되지 않는다. 왜냐하면 FileStream object가 여전히 managed heap에 남아 있는 상태고 그 파일을 독점적으로 소유하고 있어 잠겨 있기 때문이다.
|
|
|
``` cs
|
... | ... | @@ -94,17 +94,6 @@ throw와 throw ex표현에는 차이점이 있는데, throw를 단독으로 사 |
|
|
|
|
|
* **사용자 정의 exception type**
|
|
|
exception은 type이다. 따라서 원한다면 별도로 class를 만들어 사용할 수 있다. 사용자 정의 exception은 System.Exception을 부모로 두는 것을 권장한다.
|
|
|
|
|
|
* **올바른 예외처리**
|
|
|
1. public method에 한해서는 parameter 값이 올바른지 확인하고, 올바른 parameter가 아니라면 exception을 발생시킨다.
|
|
|
2. exception을 범용적으로 catch하는 것을 thread 하나만 둔다. 그 외에는 catch syntax에 반드시 예외 타입을 적용한다.
|
|
|
3. 자원수거가 목적은 try/finally의 조합은 언제든 사용할 수 있다.
|
|
|
4. 성능상 문제가 발생할 수 있는 경우, 즉, 호출 시 예외가 대량으로 발생하는 method가 있다면 exception처리가 없는 method를 함께 제공한다.
|
|
|
|
|
|
<br>
|
|
|
마이크로소프트는 Parse method를 out parameter를 사용해 개선한 TryParse method를 .NET 2.0의 BCL에 포함시켰다. 이 method는 문자열을 숫자로 바꿀 수 있는 경우에만 out 형식의 인자에 숫자값을 담고, method 실행 성공 여부만 반환하고 exception을 발생시키지 않는다.
|
|
|
|
|
|
try/catch는 thread 단위마다 단 한번만 전역적으로 적용해야 한다.그 밖의 코드에서 예외 처리가 필요하다면 try/catch를 하더라도 catch에 정확한 예외 타입을 지정하는 것을 원칙으로 한다.
|
|
|
``` cs
|
|
|
using System;
|
|
|
|
... | ... | @@ -127,15 +116,25 @@ exception은 type이다. 따라서 원한다면 별도로 class를 만들어 사 |
|
|
}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
* **올바른 예외처리**
|
|
|
1. public method에 한해서는 parameter 값이 올바른지 확인하고, 올바른 parameter가 아니라면 exception을 발생시킨다.
|
|
|
2. exception을 범용적으로 catch하는 것을 thread마다 하나만 둔다. 그 외에는 catch syntax에 반드시 예외 타입을 적용한다.
|
|
|
3. 자원수거가 목적은 try/finally의 조합은 언제든 사용할 수 있다.
|
|
|
4. 성능상 문제가 발생할 수 있는 경우, 즉, 호출 시 예외가 대량으로 발생하는 method가 있다면 exception처리가 없는 method를 함께 제공한다.
|
|
|
|
|
|
<br>
|
|
|
마이크로소프트는 Parse method를 out parameter를 사용해 개선한 TryParse method를 .NET 2.0의 BCL에 포함시켰다. 이 method는 문자열을 숫자로 바꿀 수 있는 경우에만 out 형식의 인자에 숫자값을 담고, method 실행 성공 여부만 반환하고 exception을 발생시키지 않는다.
|
|
|
|
|
|
try/catch는 thread 단위마다 단 한번만 전역적으로 적용해야 한다.그 밖의 코드에서 예외 처리가 필요하다면 try/catch를 하더라도 catch에 정확한 예외 타입을 지정하는 것을 원칙으로 한다.
|
|
|
_ _ _
|
|
|
### **3. DateTime, TimeSpan, StopWatch**
|
|
|
#### **● System.DateTime**
|
|
|
DateTime은 struct로정의된 value type이다.
|
|
|
**1. UTC(Universal Time, Coordinated) :** 지구의 자전으로 인해 시간차가 발생하는 지역은 Time Zone을 두어 상대적인 차이를 조정하는데 그리니치 천문대가 위치한 영국의 동쪽에 위치하고 날짜 분기선 이전에 있는 대한민국은 Time Zone이 UTC +9에 해당한다. 이 때문에 UTC +9를 한국 표준시(KST:Korea Standard Time)라고도 한다.
|
|
|
**2. local time :** Time Zone이 반영된 시간.
|
|
|
**3. Epoch Time, Unix TimeStmp, POSIX Time :** 유닉스 및 자바 관련 플랫폼에서는 1970년 1월 1일을 기준으로하는 시간(닷넷의 DateTime은시간의 기준값이 1년 1월 1일) 자바에서는 System.currentTimeMillis method를 제공하는데, 이 method는 현재 시간을 UTC 기준의 밀리초 단위로 Epoch 시간 이후로 흐른 값을 반환한다.
|
|
|
<br>
|
|
|
영국은 UTC와 local time이 동일하지만 시간대가 UTC +9인 대한민국은 영국이 한밤 중일 때 지역 시간은 오전 9시가 된다. 따라서 영국을 제외하고는 거의 모든 나라에서 시간을 나타낼 때 UTC인지 local time인지를 명시해야만 정확한 시간을 알 수 있다. .Net의 DateTime type은 이 구분을 enum type인 Kind속성으로 알려준다.
|
|
|
* **UTC(Universal Time, Coordinated) :** 지구의 자전으로 인해 시간차가 발생하는 지역은 Time Zone을 두어 상대적인 차이를 조정하는데 그리니치 천문대가 위치한 영국의 동쪽에 위치하고 날짜 분기선 이전에 있는 대한민국은 Time Zone이 UTC +9에 해당한다. 이 때문에 UTC +9를 한국 표준시(KST:Korea Standard Time)라고도 한다.
|
|
|
* **local time :** Time Zone이 반영된 시간.
|
|
|
* **Epoch Time, Unix TimeStmp, POSIX Time :** 유닉스 및 자바 관련 플랫폼에서는 1970년 1월 1일을 기준으로하는 시간(닷넷의 DateTime은시간의 기준값이 1년 1월 1일) 자바에서는 System.currentTimeMillis method를 제공하는데, 이 method는 현재 시간을 UTC 기준의 밀리초 단위로 Epoch 시간 이후로 흐른 값을 반환한다.
|
|
|
|
|
|
영국은 UTC와 local time이 동일하지만 시간대가 UTC +9인 대한민국은 영국이 한밤 중일 때 지역 시간은 오전 9시가 된다. 따라서 영국을 제외하고는 거의 모든 나라에서 시간을 나타낼 때 UTC인지 local time인지를 명시해야만 정확한 시간을 알 수 있다. .Net의 DateTime type은 이 구분을 enum type인 Kind속성으로 알려준다.
|
|
|
|
|
|
| **열거형 값** | **설명** |
|
|
|
|--------|--------|
|
... | ... | @@ -145,7 +144,6 @@ DateTime은 struct로정의된 value type이다. |
|
|
|
|
|
<br>
|
|
|
* **문제) Unix Time을 DateTime으로 바꾸기 / DateTime을 UnixTime으로 바꾸기**
|
|
|
|
|
|
``` cs
|
|
|
static void Main(string[] args)
|
|
|
{
|
... | ... | |