c\#코드 의 다섯 가지 기술 개선(1)
사용자 입력 인증 에서 이상 처리 체 제 를 사용 하 시 겠 습 니까?
그렇다면 프로젝트 수행 속 도 를 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\#코드 개선 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
c\#코드 의 다섯 가지 기술 개선(1)친애 하 는 독자 님,제 가 이렇게 긴 제목 을 썼 다 고 해서 저 를 비판 하지 마 세 요.new 연산 자 를 사용 하여 간단 한 정수 변 수 를 만 들 지 마 세 요.나 는 당신 이 new 연산 자 를 사용 하여...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.