반응형 전체 글109 [Effective C#] Item16 생성자 내에서는 절대로 가상함수를 호출하지 마라. 객체가 완전히 생성되기전에 가상함수를 호출하면 이상동작을 일으킨다. 어떤 타입이든 생성자가 수행을 완료하기 전에는객체가 와전히 생성되었다고 할 수 어ㅃㅅ으므로 생성자 내에서 가상함수를 호출하면 개발자의 예상과는 다르게 코드가 흘러갈 수 있다. class B { protected B() { VFunc(); } protected virtual void VFunc()//가상함수 { Console.WriteLine("VFunc in B"); } } class Derived : B { private readonly string msg = "Set by Initializer"; public Derived(string msg) { this.msg = msg; } protected override void VFunc(.. 2022. 8. 30. [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. 이전 1 ··· 14 15 16 17 18 19 20 ··· 28 다음 반응형