c\#코드 의 다섯 가지 기술 개선(2)

7399 단어 c#코드기교.
본문 에서 나 는 너 에 게 c\#프로 그래 밍 의 5 가지 가장 좋 은 실천 을 보 여줄 것 이다.나 는 일상적인 프로 그래 밍 경험 에서 이런 실천 을 배 웠 다.나 는 release 모드 에서 모든 코드 를 테스트 하고 개발 환경 이 안 정 된 후에 캡 처 했다.나 는 네가 이 건의 들 을 좋아 할 것 이 라 고 생각한다.
데이터 형식 을 사용 하기 전에 선택 하 십시오.
많은 유형 에 대해 우 리 는 일상생활 에서 어떤 데이터 유형 을 사용 할 지 결정 하지 않 는 것 이 바람 직 하 다.몇 달 전 만 해도 나 도 그 중 하 나 였 다.그러나 코드 성능 을 향상 시 키 기 위해 프로 그래 밍 에서 가장 좋 은 실천 을 배우 기 시 작 했 을 때 잘못된 데이터 형식 이 코드 에 어떻게 영향 을 미 치 는 지 알 게 되 었 습 니 다.나 는 이 개념 을 증명 하기 위해 시범 을 보 여줄 것 이다.

static void Main(string[] args) 
{ 
  List<Int32> li = new List<int>(); 
  Stopwatch sw =new Stopwatch(); 
  sw.Start(); 
  for (int i = 0; i < 10000; i++) 
  { 
    li.Add(i); 
  } 
  sw.Stop(); 
  Console.Write("Using Arraylist(Object)" + sw.ElapsedTicks + "
"); sw.Reset(); sw.Start(); Int32[] a = new Int32[10000]; for (int i = 0; i < 10000; i++) { a[i] = i; } sw.Stop(); Console.Write("Using Value(Integer Array)" + sw.ElapsedTicks); Console.ReadLine(); }

위의 코드 에서 먼저 나 는 하나의 list 를 사용 하여 1000 개의 정수 치 를 저장 했다.두 번 째 로 같은 조작 을 실 행 했 을 때 나 는 정수 배열 을 사용 했다.나의 출력 캡 처 는 어떤 저장 체제 가 정수 배열 에 가장 적합 한 지 보 여 주 었 다.지금,당신 은 왜 이 list 가 더 많은 시간 을 써 야 하 는 지 생각 할 수 있 습 니 다.이 유 는 list 가 대상 형식 으로 데 이 터 를 저장 하고 우리 가 먼저 값 형식 을 저장 하려 고 할 때 인용 형식 으로 변환 한 다음 에 저장 하기 때 문 입 니 다.따라서 첫 번 째 는 항상 적당 한 저장 체 제 를 선택 하여 최고의 성능 을 얻 는 것 이다.
foreach 대신 순환 사용
나 는 지금 매우 재 미 있 는 사실 을 설명 할 것 이다.나 는 너희들 이 모두 for 와 foreach 순환 에 익숙 하 다 고 생각한다.지금 내 가 뭐 가 더 빠 르 냐 고 물 어보 면?음..모 르 겠 어 요.그 렇 죠?
얘 들 아,for 순환 이 foreach 순환 보다 훨씬 빠르다.아래 의 예 를 봅 시다.

List<Int32> Count = new List<int>();
List<Int32> lst1 = new List<Int32>();
List<Int32> lst2 = new List<Int32>();

for (int i = 0; i < 10000; i++)
{
  Count.Add(i);
}

Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = 0; i < Count.Count; i++)
{
  lst1.Add(i);
}
sw.Stop();

Console.Write("For Loop :- " + sw.ElapsedTicks + "
"); sw.Restart(); foreach (int a in Count) { lst2.Add(a); } sw.Stop(); Console.Write("Foreach Loop:- " + sw.ElapsedTicks); Console.ReadLine();

걱정 하지 마 세 요.저 는 이미 발표 모드 에서 이 예 시 를 테스트 했 습 니 다.이 화면 캡 처 는 몇 번 의 테스트 가 실 행 된 후에 촬영 한 것 입 니 다.
클래스 를 언제 사용 할 지,구조 체 를 언제 사용 할 지 선택 하 십시오.
이러한 사실 을 받 아들 이 는 것 은 c\#의 구조 체 와 종 류 를 기본적으로 이해 하거나 가장 좋아 하 는 프로 그래 밍 언어 중의 구조 체 와 종 류 를 적어도 이해 하 는 것 이다(존재 한다 면).좋 습 니 다."오래전 에 구조 체 를 배 웠 지만 일상생활 에서 사용 해 본 적 이 없다"고 생각 했다 면 95%가 유형 과 구조 체 의 성능 을 측정 해 본 적 이 없 는 개발 자 중 한 명 입 니 다.걱정 마 세 요.이 글 을 쓰기 전에 나 도 없 었 다.
그럼 종 류 는 요?예,우 리 는 가끔 일상 프로젝트 개발 에서 한 가지 유형 을 실현 합 니 다.
지금 나의 문 제 는'어느 것 이 더 빠 릅 니까?유형 입 니까?구조 체 입 니까?'입 니까?나 는 네가 테스트 를 해 본 적 이 없다 고 생각 할 것 이 라 고 추측 했다.네,테스트 해 보 겠 습 니 다.아래 코드 좀 봐.

namespace BlogProject
{
  struct MyStructure
  {
    public string Name;
    public string Surname;
  }
  class MyClass
  {
    public string Name;
    public string Surname;
  }
  class Program
  {
    static void Main(string[] args)
    {

      MyStructure[] objStruct = new MyStructure[1000];
      MyClass[] objClass = new MyClass[1000];


      Stopwatch sw = new Stopwatch();
      sw.Start();
      for (int i = 0; i < 1000; i++)
      {
        objStruct[i] = newMyStructure();
        objStruct[i].Name = "Sourav";
        objStruct[i].Surname = "Kayal";
      }
      sw.Stop();
      Console.WriteLine("For Structure:- " + sw.ElapsedTicks);
      sw.Restart();

      for (int i = 0; i < 1000; i++)
      {
        objClass[i] = newMyClass();
        objClass[i].Name = "Sourav";
        objClass[i].Surname = "Kayal";
      }
      sw.Stop();
      Console.WriteLine("For Class:- " + sw.ElapsedTicks);

      Console.ReadLine();
    }
  }
}
출력 결 과 는 다음 과 같 습 니 다.

지금 은 구조 체 가 종류 보다 훨씬 빠르다 는 것 이 분명 하 다.마찬가지 로 저 는 발표 모드 에서 이 코드 를 테스트 하고 최소 20 개의 출력 을 얻어 프로그램 이 안정 적 인 위치 에 이 르 도록 했 습 니 다.
지금 가장 큰 문 제 는'왜 구조 체 가 클래스 보다 빠 릅 니까?'
우리 가 알 고 있 는 바 와 같이 구조 체 변 수 는 값 유형 이 고 값(또는 구조 체 변수)은 한 위치 에 저 장 됩 니 다.
클래스 대상 은 참조 형식 입 니 다.대상 형식 이 라면 인용 을 만 들 고 메모리 의 다른 위치 에 값 을 저장 합 니 다.기본적으로,값 은 관리 가능 한 더미 에 저장 되 어 있 으 며,바늘 은 창고 에 생 성 됩 니 다.이러한 방식 으로 메모리 에서 대상 을 실현 하 는 데 는 구조 체 변수 보다 더 많은 시간 이 걸린다.
문자열 연결 작업 은 항상 Stringbuilder 를 사용 합 니 다.
이 점 은 개발 자 들 에 게 매우 중요 하 다.대량의 문자열 조합 작업 을 할 때 String 대신 StringBuilder 를 사용 하 십시오.코드 성능 에 미 치 는 영향 을 보 여주 기 위해 다음 예제 코드 를 준비 하 였 습 니 다.나 는 for 순환 에서 500 번 의 문자열 조합 작업 을 실 행 했 습 니 다.

public classTest
{
  public static string Name { get; set; }
  public static string surname; 
} 
class Program
{
  static void Main(string[] args)
  {
    string First = "A";
    StringBuilder sb = new StringBuilder("A");

    Stopwatch st = new Stopwatch();
    st.Start();
    for (int i = 0; i < 500; i++)
    {
      First = First + "A";
    }
    st.Stop();
    Console.WriteLine("Using String :-" + st.ElapsedTicks);
    st.Restart();

    for (int i = 0; i < 500; i++)
    {
      sb.Append("A");
    }
    st.Stop();
    Console.WriteLine("Using Stringbuilder :-" + st.ElapsedTicks);
    Console.ReadLine();
  }
}
이것 은 출력 입 니 다:

클래스 데이터 구성원 을 할당 하 는 가장 좋 은 방법 을 선택 하 십시오.
클래스 변 수 를 할당 하기 전에 다음 코드 와 출력 화면 을 보 는 것 을 권장 합 니 다.

namespace Test
{ 
  public class Test 
  { 
    public staticstring Name { get; set; }
    public staticString surname;
  }
  class Program
  {
    static void Main(string[] args)
    {

      Stopwatch st = new Stopwatch();
      st.Start();
      for (int i = 0; i < 100; i++)
      {
        Test.Name = "Value";
      }
      st.Stop();
      Console.WriteLine("Using Property: " + st.ElapsedTicks);
      st.Restart();
      for (int i = 0; i < 100; i++)
      {
        Test.surname = "Value";
      }
      st.Stop();
      Console.WriteLine("Direct Assign: " + st.ElapsedTicks);
      Console.ReadLine();
    }
  } 
}

예,우리 의 출력 화면 은 속성 을 사용 하여 데 이 터 를 분배 하 는 것 이 직접 분배 하 는 것 보다 훨씬 느리다 는 것 입 니 다.
이상 은 c\#코드 를 개선 하 는 다섯 가지 기술(2)의 상세 한 내용 입 니 다.c\#코드 개선 에 관 한 자 료 는 우리 의 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기