본문 바로가기
C++ 200제/코딩 IT 정보

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

by vicddory 2017. 6. 9.

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가지 (작업 속도와 효율성 향상)

댓글