본문 바로가기
반응형

C#52

[Effective C#] Item15 불필요한 객체를 만들지 마라 모든 참조 타입의 객체는 지역 변수라도 동적으로 메모리를 할당하는데 일허게 할당된 객체는 이 객체를 참조하는 상위 멤버가 삭제되면 가비지가 된다. 힙에서 새로운 객체를 생성하고 삭제하는 작업은 생각보다 많은 프로세서시간을 사용하기때문에 성능에 문제를 초래할 수 있다. 참조 타입의 지역변수를 멤버변수로 선언 자주 호출되는 이벤트 핸들러에 참조 타입의 객체를 지역변수로 선언하면 가비지 콜렉터가 많은 생성/ 제거를 반복하여 성능에 문제가 발생한다. public class FirstControl : Control { public FirstControl() {} protected override void OnPaint(PaintEventArgs e) { //나쁜 예, Point 이벤트가 발생할 때 마다 동일한 폰.. 2022. 7. 13.
[Effective C#] Item14 초기화 코드가 중복되는것을최소화 하라. 초기화 코드가 중복되는것을 최소화 하라. 다른 생성자를 화출하여 초기화 과정의 일부를 위임 공통으로사용하는 생성자를 다른 생성자에서 호출하여 변수에 대한 중복 초기화 코드를 제거 public class Myclass { private List coll; //데이터 컬렉션 private string name //인스턴스 변수 public Myclass() : this(0,""){} public Myclass(int count) : this(count, string.Empty){} public Myclass(int count, string name) { coll = (count > 0) ? new List(count) : new List(); this.name = name; } } 다른 생성자를 호출하여 초.. 2022. 7. 8.
[Effective c#] Item11 ~ Item13 .NET 리소스 관리에 대한 이해 힙에 관한 메모리 관리는 가비지 콜렉터가 완전히 책임 진다. 이외에 비관리 리소스는 개발자가 관리해야함 더보기 비관리 리소스 - finalizer와 IDisposable 인터페이스 라는 2개의 메커니즘을 제공 => finalizer는 객체를 가비지로 판단한 경우 이 객체를 다른 큐에 삽입하여 나중에 finalizer를 호출할 준비만 수행함 가비지콜렉터의 세대 개념 0세대 : 수집 절차 이후 생서된 객체들 1새대 : 두번이상 수집절차에서 살아남은객체들 수집 절차 ? 기본적으로 0세대 객체만 검사 1세대는 대력 10번에 한번 검사 2세대는 대력 100번에 한번 검사 비관리 리소스를해제하는 좋은 방법은 IDisposable을 사용하는 것이다. [Item12] 할당 구문보다 멤.. 2022. 7. 8.
[Effective C#] Item6 ~ Item 10 [Item6] nameof 연산자를 적극 확용하라. 항상 로컬이름을 문자열로 반환하는 역할을 한다. 심볼의 이름을 평가하며 타입, 변수, 인터페이스, 네임스페이스 에 대해 사용할 수 있다. 심볼의 이름을 바꾸거나 수정할 때도 손쉽게 반영 가능하다. 항상 로컬 이름을 문자열로 반환한다. Ex) 완전 정규화된 이름이 System.Int.MaxValue 이더라도 항상 로컬이름 MaxValue를 반환 [Item7] delegate를 이용하여 콜백을 표현하라. delegate를 이용하면 타입 안정적인 콜백을 정의할 수 있다. .Net Framework 라이브러리는 Predicate, Action, Func와 같은 형태로 자주 사용되는 delegate를 정의해두고 있다. 더보기 Predicate : 조건을 검사하여.. 2022. 7. 8.
반응형