티스토리 뷰

목차

    반응형

    C# 코드 최적화 7가지 (작업 속도와 효율성 향상)


    코드 최적화란 모든 개발자에게 중요한 측면입니다. 이 포스트에서 소개할 여러 팁은 작업 속도와 효율성을 향상해 더 나은 응용 프로그램을 제작할 수 있도록 도울 것입니다. 상용 메모리 관리 툴들은 최적화가 진행 된 응용 프로그램 코드의 질을 더 좋게 평가할 것이며, 메모리 관리 측면에서도 더 나은 결과를 유추할 수 있습니다.


    작업 시간도 아낄 수 있으며, 유지 보수 비용도 절약할 수 있는 코드 최적화는 반드시 진행해야 할 사항입니다. 고민하지 말고 무조건 최적화를 하세요. 이 포스트가 그것을 돕습니다.


    ? 조건 연산자를 사용하세요


    ?를 사용하는 것은 전혀 새로운 것이 아니고, 잘만 사용하면 오히려 더 편리합니다.

    아마도 ? 연산자는 브라이언 케니건(Brian Kernighan)과 데니스 리치(Dennis Ritchie)가 지은 "The C Programming Language"란 책에서 맨 처음 소개된 것이라 생각이 듭니다.

    어쨌건, ?를 사용하면 일반적인 패턴의 압축이 가능하여 코드 최적화가 됩니다.


    1
    2
    3
    4
    5
    6
    7
    8
    int x = 10;
    int y = 20;
    int max;
     
    if (x > y)
        max = x;
    else
        max = y;
    cs


    이곳에 ? 연산자를 적용해서 새로 작성해 압축할 수 있습니다.


    1
    2
    3
    int x = 10;
    int y = 20;
    int max = (x > y) ? x : y;
    cs


    C# 코드 최적화 9가지 (작업 속도와 효율성 향상)[Visual Studio 최적화] C# 속도 성능 튜닝


    Null-Coalesce operator (??)


    Null을 위한 중복 연산자, 겹쳐진 연산자 등으로 해석 할 수 있는데, 과연 프로그래머들이 Null을 위한 테스트를 얼마나 할까요? 만약 Null을 테스트할 경우 이 연산자는 꽤 편합니다.


    다음의 코드 최적화 소스 예제를 참고해서 살펴보면,


    1
    2
    3
    4
    5
    6
    7
    8
    object cache = null;
    object d = new object();
    object e;
     
    if (c != null)
        e = c;
    else
        e = d;
    cs


    우선, 한개의 ? 키워드를 사용해서 코드 재작성이 가능합니다. 그리고, ??를 두 개 사용하면 더 축약 할 수 있습니다.


    1
    2
    3
    object cache = null;
    object d = new object();
    object e = (c != null) ? c : d;
    cs


    그리고, ??를 두 개 사용하면 더 축약이 가능해 집니다.


    1
    2
    3
    object cache = null;
    object d = new object();
    object e = c ?? d;
    cs

    객체 초기화


    새 오브젝트를 생성하면 내부의 속성 중 하나 이상에 값을 할당해야 합니다.

    C# 3.0 이후에는 가독성 향상과 코드 단축을 위해 개체 자체의 초기화가 가능해졌습니다.


    1
    2
    3
    Customer c = new Customer();
    c.Name = "James";
    c.Address = "204 Lime Street";
    cs


    이와 같은 소스를 한 줄로 코드 최적화 압축할 수 있습니다.


    1
    2
    3
    4
    5
    Customer c = new Customer
    {
        Name="James",
        Address = "204 Lime Street"
    };
    cs


    c# 속도 개선 코드 최적화[Visual Studio 최적화] C# 속도 성능 튜닝


    The using statement


    자주 글꼴, 파일 핸들, 네트워크 리소스 등을 위해 시스템 자원을 사용합니다.


    이런 리소스 등을 사용할 때 (Resource, You use it, dispose - 리소스, 할당 후 사용과 해제)란 중요한 점이 있지만, 메모리나 낭비되는 리소스들을 위한 Dispose 작업은 다들 잊어버립니다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // 1. Allocation of the object
    Font font1 = new Font("Arial"10.0f);
     
    try{
        // 2. The bit where we use the resource
    }finally{
        // 3. Disposal of the object
         if (font1 != null)
                ((IDisposable)font1).Dispose();
    }
    cs


    그래서 Using 문을 사용해 코드를 축약합니다.


    1
    2
    3
    4
    5
    6
    // Allocate the resource
    using(Font font1 = new Font("Arial"10.0f))
    {
          // The bit where we use the resource
    }
          // Disposal is automatic
    cs


    using문은 실제 자원을 할당하고 관리하는 .NET 개체인데, "IDisposable" 인터페이스를 구현해 리소스 관리가 가능해 위와 같이 선언만 해놓으면 저절로 자원 관리가 되어 코드 최적화가 됩니다.

    긴 이름의 네임스페이스와 타입의 별칭 붙이기


    식별자나 별칭은 오랫동안 파일, 클래스, namespace 등을 대표하는 "이름"으로 작용이 될 수 있습니다. 이것을 이용해서 쉽게 접근, 수정, 열기 등의 작업을 할 수 있습니다.


    1
    2
    3
    4
    5
    6
    using Word = Microsoft.Office.Interop.Word;
     
    ...Word.Application = new Word.Application()
    {
        Visible = True;
    }
    cs


    Nullable objects


    변수는 값을 가지고 있어야 하고, 비어있으면 안 됩니다. 때에 따라 비어야 할 때도 있고, 정의되지 않았을 경우 null을 할당하는 것이 편하기도 하며, .NET 2.0에서부터 Nullable을 도입했습니다.


    사용 예는 아래와 같습니다.


    1
    2
    Nullable<int> x = null;
    int? x = null;
    cs


    변수를 정의한 다음 ?를 넣고, 타입은 Nullable로 감싸서 사용합니다.


    c# 소스 코드 최적화 성능 튜닝[Visual Studio 최적화] C# 속도 성능 튜닝


    Automatic Properties


    속성은 일반적으로 Getter과 Setter로 외부에 노출이 되고, 이를 이용해 값들을 할당합니다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Person
    {
        private string _firstName;
        public string FirstName;
        {
            get { return _firstName; }
            set { _firstName = value; }
        }
    }
    cs


    C# 3.0에서부터 자동 속성이 추가되어, 아래처럼 코드 최적화 방법을 사용할 수 있습니다.


    1
    2
    3
    4
    5
    6
    7
    8
    public class Person
    {
        public string Firstname 
        {
            get;
            set;
        }
    }
    cs


    C#의 컴파일러는 자동으로 백업되는 변수를 생성, 올바른 설정, 속성 설정 등을 수행하기 때문에, Public 클래스 대신에 String 변수를 생성할 수 있습니다.


    출처 1 - 10 C# Shorthands that improve productivity (링크 깨짐)

    출처 2 - 7 Ways To Optimize C# Code

    C# 코드 최적화 7가지 (작업 속도와 효율성 향상)

    반응형