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

친애 하 는 독자 님,이 글 에서 저 는 c\#프로 그래 밍 의 가장 좋 은 실천 을 제공 합 니 다.
사용자 입력 인증 에서 이상 처리 체 제 를 사용 하 시 겠 습 니까?
그렇다면 프로젝트 수행 속 도 를 62 배 낮 춘 사람 이다.나 못 믿 어?몇 분 기다 리 기;내 가 가르쳐 줄 게.그러나 이 예 에 앞서 어디 에 이상 처리 가 필요 한 지 알 아 보 자.
예 를 들 어 사용자 의 데 이 터 를 검증 하고 있 습 니 다.잘못된 입력 에 대해 이상 을 일 으 키 고 클 라 이언 트 에 게 던 집 니 다.다음 과 같 습 니 다.

class BusinessLogcCheck 
{ 
  public void Check() 
  { 
    try 
    { 
      //Your validation code is here 
    } 
    catch (Exception ex) 
    { 
      throw new Exception("My own exception"); 
    } 
  } 
}
친애 하 는 친구 여,다음 예시 에서 출력 화면 을 보면,이 방법 이 얼마나 나 쁜 지 깨 닫 게 될 것 이다.아래 코드 를 보 여 주세요.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Diagnostics; 
using System.IO; 
using System.Net; 
using System.Net.NetworkInformation; 
namespace Test1 
{ 
  class Program 
  { 
    public static void ThrowTest() 
    { 
      throw new Exception("This is exceptopn"); 
    } 
    public static Boolean Return() 
    { 
      return false; 
    } 
    static void Main(string[] args) 
    { 
      Stopwatch sw = new Stopwatch(); 
      sw.Start(); 
      try 
      { 
          ThrowTest(); 
      } 
      catch 
      { 
      } 
      sw.Stop(); 
      Console.WriteLine("With Exception " + sw.ElapsedTicks); 
      sw.Restart(); 
      try 
      { 
        Return(); 
      } 
      catch 
      { 
      } 
      sw.Stop(); 
      Console.WriteLine("With Return " + sw.ElapsedTicks); 
      Console.ReadLine(); 
    } 
  } 
}
이것 이 바로 당신 이 기다 리 는 출력 입 니 다.

나의 개념 증명 은 매우 간단 하 다.한 함수 에서 나 는 이상 을 던 졌 다.다른 함수 에서 나 는 사용자 의 입력 을 검사 한 후에 불 값 을 되 돌려 주 었 다.이상 처리 가 코드 성능 에 어떻게 영향 을 미 치 는 지 믿 게 해 주 는 계산기 화면(하하..)도 붙 였 습 니 다.
따라서 우 리 는"사용자 에 게 인증 을 입력 하 는 데 이상 을 일 으 키 지 말 라"는 결론 을 내 릴 수 있다."불 리 턴 기술(또는 유사 한 기술)을 사용 하여 업무 논리 에서 의 입력 을 검증 합 니 다."이상 대상 의 씀 씀 이 가 매우 크기 때문이다.
영원히 순환 에서 try-Catch 를 실현 하지 마 세 요.
예,그것 도 이상 처리 와 관련 이 있 습 니 다.나 는"영원히 순환 에서 try-catch 를 실행 하지 마 세 요"라 고 반복 했다.예 를 들 어 증명 하 겠 습 니 다.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Diagnostics; 
using System.IO; 
using System.Net; 
using System.Net.NetworkInformation; 
namespace Test1 
{ 
  class Program 
  { 
    static void Method1() 
    { 
      for (int i = 0; i < 1000; i++) 
      { 
        try 
        { 
          int value = i * 100; 
          if (value == -1) 
          { 
            throw new Exception(); 
          } 
        } 
        catch 
        { 
        } 
      } 
    } 
    static void Method2() 
    { 
      try 
      { 
        for (int i = 0; i < 1000; i++) 
        { 
          int value = i * 100; 
          if (value == -1) 
          { 
            throw new Exception(); 
          } 
        } 
      } 
      catch 
      { 
      } 
    } 
    static void Main(string[] args) 
    { 
      Stopwatch sw = new Stopwatch(); 
      sw.Start(); 
      Method1(); 
      sw.Stop(); 
      Console.WriteLine("Within Loop " + sw.ElapsedTicks); 
      sw.Restart(); 
      Method2(); 
      sw.Stop(); 
      Console.WriteLine("Outside of Loop " + sw.ElapsedTicks); 
      Console.ReadLine(); 
    } 
  } 
}
출력 화면 입 니 다.

method 1 의 이 프로그램 에서 저 는 for 순환 에서 이상 처리 체 제 를 실 현 했 고 method 2 에서 저 는 순환 이 없 는 상황 에서 이상 처리 체 제 를 실 현 했 습 니 다.우리 의 출력 창 은 우리 가 for 순환 밖에서 try-catch 프로그램의 실행 속 도 를 실현 하면 순환 내 try-catch 보다 2 배 빠르다 는 것 을 보 여 줍 니 다.
마찬가지 로 유일한 결론 은'프로젝트 의 순환 에서 try-catch 를 실현 하지 말 라'는 것 이다.네!for 순환 뿐만 아니 라 모든 순환 에서.)
정수 변 수 를 만 들 기 위해 new 연산 자 를 사용 할 정도 로 미 쳤 습 니까?
친애 하 는 독자 님,제 가 이렇게 긴 제목 을 썼 다 고 해서 저 를 비판 하지 마 세 요.new 연산 자 를 사용 하여 간단 한 정수 변 수 를 만 들 지 마 세 요.나 는 당신 이 new 연산 자 를 사용 하여 간단 한 정수 변 수 를 만 들 면 자동 으로 0 으로 설정 되 고 오 류 를 받 지 않 는 다 고 말 할 것 이라는 것 을 알 고 있 습 니 다.예 를 들 어'할당 되 지 않 은 부분 변수'등 입 니 다.그러나 이것 은 정말 자동 할당 을 0 으로 받 아야 합 니 다.당신 의 목적 은 부분 변 수 를 만들어 저장 하 는 것 입 니까?new 연산 자 는 코드 실행 성능 을 어떻게 낮 추 는 지 보 여 줍 니 다. 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Diagnostics; 
using System.IO; 
using System.Net; 
using System.Net.NetworkInformation; 
namespace Test1 
{ 
  class Program 
  { 
    static void Main(string[] args) 
    { 
      Stopwatch sw = new Stopwatch(); 
      sw.Start(); 
      for (int i = 0; i < 1000; i++) 
      { 
        int a = new int(); 
        a = 100; 
      } 
      sw.Stop(); 
      Console.WriteLine("Using New operator:- " + sw.ElapsedTicks); 
      sw.Restart(); 
      for (int i = 0; i < 1000; i++) 
      { 
        int a; 
        a = 100; 
      } 
      sw.Stop(); 
      Console.WriteLine("Without new operator:- "+ sw.ElapsedTicks); 
      Console.ReadLine(); 
    } 
  } 
}
출력 캡 처 는 다음 과 같 습 니 다.

new 연산 자 는 실행 속 도 를 5 배 낮 추 었 다.나 는 출력 화면 을 부인 할 수 있 지만,한 가지 일이 있다!!한 번 에 1000 개의 변 수 를 만 듭 니 다.프로젝트 에서 1000 개의 변 수 를 한 번 에 만 들 지 않 고 최대 2~3 개의 변 수 를 만 들 지 않 습 니 다.
네.응용 프로그램 이 웹 프로그램 입 니까?만약 그렇다면,유행 하 는 웹 프로그램의 클릭 수 를 확인 하 십시오.나 는 그것 이 매일 1000 이 넘는다 고 확신 합 니 다.
마찬가지 로 이 줄 의 결론 은"new 연산 자 를 미 친 듯 이 사용 하여 정수 변 수 를 만 들 지 마라"는 것 이다.
당신 의 목적 에 따라 가장 좋 은 집합 을 선택 하 세 요.
우리.net 개발 자 들 은 c\#의 집합 과 값 을 저장 하 는 방법 에 대해 잘 알 고 있 습 니 다.그들 이 어떻게 검색 을 수행 하 는 지 보 여 주세요.검색 정수 의 성능 을 봅 니 다.이것 은 나의 코드 다.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Diagnostics; 
using System.IO; 
using System.Net; 
using System.Net.NetworkInformation; 
namespace Test1 
{ 
  class Program 
  { 
    static void Main(string[] args) 
    { 
      List<Int32> li = new List<Int32>(1000); 
      Dictionary<int, int> di = new Dictionary<int, int>(1000); 
      int[] arr = new int[1000]; 
      int a; 
      for (int i = 0; i < 1000; i++) 
      { 
        li.Add(i); 
        di.Add(i, i); 
        arr[i] = i; 
      } 
      Stopwatch sw = new Stopwatch(); 
      sw.Start(); 
      a = li[500]; 
      sw.Stop(); 
      Console.WriteLine("From list:- " + sw.ElapsedTicks); 
      sw.Start(); 
      a = arr[500]; 
      sw.Stop(); 
      Console.WriteLine("From Integer array:- " + sw.ElapsedTicks); 
      sw.Restart(); 
      a = di[500]; 
      sw.Stop(); 
      Console.WriteLine("From Dictionary:- " + sw.ElapsedTicks); 
      Console.ReadLine(); 
    } 
  } 
}
출력 은 다음 과 같 습 니 다:

사전 의 경우 검색 성능 이 가장 떨 어 지 는 반면 list 와 정수 배열 의 경우 성능 이 매우 비슷 하 다 는 것 을 잘 알 수 있다.

방법 은 좋 지만 모든 때 가 아니다.
만약 당신 이 프로 그래 밍 을 처음 배 웠 던 며칠 을 기억 하고 있다 면,당신 은 하나의 개념 을 배 웠 습 니 다.바로 하나의 방법 으로 코드 에서 좋 은 연습 을 실현 하 는 것 입 니 다.예,하나의 방법 을 실현 하여 어떤 임 무 를 수행 하 는 것 이 좋 습 니 다.방법 은 프로 그래 밍 에서 수천 수만 의 장점 을 가지 고 있 지만,방법 이 어떻게 집행 성능 을 떨 어 뜨리 는 지 보 자.나 는 이 점 이 방법 에 반대 하 는 것 이 아니 라 방법 호출 을 간단하게 보 여 주 는 것 이 대가 가 높 은 체제 이 고 어디서 실현 방법 과 어디서 실현 되 지 않 는 방법 에 대한 생각 을 제공 하 는 것 이 라 고 다시 한번 강조 했다.아래 코드 를 보 여 주세요.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Diagnostics; 
using System.IO; 
using System.Net; 
using System.Net.NetworkInformation; 
namespace Test1 
{ 
  class test 
  { 
    public static void Print() 
    { 
      Console.WriteLine("I am function from Class"); 
    } 
  } 
  class Program 
  { 
    static void Main(string[] args) 
    { 
      Stopwatch sw = new Stopwatch(); 
      sw.Start(); 
      test.Print(); 
      sw.Stop(); 
      Console.WriteLine(sw.ElapsedTicks); 
      sw.Restart(); 
      Console.WriteLine("I am single statement within main"); 
      sw.Stop(); 
      Console.WriteLine(sw.ElapsedTicks); 
      Console.ReadLine(); 
    } 
  } 
}
다음은 화면 출력:

여기 서 출력 창 에 메 시 지 를 인쇄 하고 싶 습 니 다.우선 정적 함수 에서 이 루어 졌 고 클래스 이름 으로 호출 되 었 습 니 다.두 번 째 는 주 함수 에서 만 작 성 했 습 니 다.네,Console.Writeline()을 통 해 아주 간단 합 니 다.출력 화면 은 함수 보다 한 줄 의 실행 이 9 배 빠르다 는 것 을 보 여 줍 니 다.따라서 유일한 결론 은'어떤 기능 을 맹목적 으로 수행 하기 전에 상황 을 파악 하고 최선 의 결정 을 내 려 보 자'는 것 이다.
결론.
오래 봐 줘 서 고마워.저 는 노트북 에서 위의 테스트 를 했 습 니 다.제 노트북 은 core i3 프로세서,4GB 메모리 와 Windows 환경 이 있 고 프로그램 이 안정 적 인 후에 모드 로 출력 합 니 다.서로 다른 플랫폼 과 출력 을 사용 하면 댓 글 부분 에 댓 글 을 쓸 공간 이 충분 합 니 다.
이상 은 c\#코드 를 개선 하 는 다섯 가지 기술(1)의 상세 한 내용 입 니 다.c\#코드 개선 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기