C\#실례 화 대상 의 세 가지 방식 과 성능 대 비 를 상세히 설명 하 다

5832 단어 C#실례 화 대상
머리말
프로젝트 를 하 는 과정 에서 2 만 개의 대상 을 실례 화하 고 List 에 추가 해 야 하 는 수요 가 있 습 니 다.
이 과정 에서 약 1min 이 걸 려 야 불 러 올 수 있 습 니 다.(전 참 이 많 습 니 다)그래서 코드 최적화 여행 을 시 작 했 습 니 다.그리고 이 기록 을 기록 합 니 다.
먼저 생각 나 는 것 은 실례 화가 비교적 오래 걸 릴 수 있다 는 것 이다.그래서 모든 실례 화 방식 을 테스트 하기 시작 했다.과정 은 다음 과 같다.
실례 화 방식
1.New 키워드 로 클래스 를 예화 합 니 다.
2.Activator 로 클래스 를 예화 합 니 다.
3.Assembly 로 하나의 종 류 를 예화 한다.
코드 구현
테스트 환경:
vs2019 .NET Framework 4.7
Intel Core i7-10510U CPU
우선 클래스 Person 을 정의 합 니 다.

public class Person 
{ 
 public Person()
 {
 }
 public Person(string name)
 {
  Name = name;
 }
 public string Name { get; set; }
}
우 리 는 먼저 인삼 이 없 는 구조 함수 에서 예화 하고 모든 방식 으로 10 번 을 진행 하 며 매번 10 만 번 을 예화 하 며 코드 는 다음 과 같다.

static void Main(string[] args)
  {
   Console.WriteLine("          (  :  )");
   Console.Write("     ");
   for (int i = 1; i <= 10; i++)
    Console.Write("{0:G}", i.ToString().PadLeft(5));
   Console.Write("
"); Console.Write("InstanceByNew".PadRight(20)); for (int i = 1; i <= 10; i++) { Person person = null; Stopwatch watch = new Stopwatch(); watch.Start(); for (int j = 0; j < 100000; j++) person = new Person(); watch.Stop(); Console.Write(watch.ElapsedMilliseconds.ToString().PadLeft(5)); } Console.Write("
"); Console.Write("InstanceByActivator".PadRight(20)); for (int i = 1; i <= 10; i++) { Type type = Type.GetType("ConsoleApp1.Person"); Person person = null; Stopwatch watch = new Stopwatch(); watch.Start(); for (int j = 0; j < 100000; j++) { object obj = Activator.CreateInstance(type); person = obj as Person; } watch.Stop(); Console.Write(watch.ElapsedMilliseconds.ToString().PadLeft(5)); } Console.Write("
"); Console.Write("InstanceByAssembly".PadRight(20)); for (int i = 1; i <= 10; i++) { Assembly assembly = Assembly.Load("InstancePerformance"); Person person = null; Stopwatch watch = new Stopwatch(); watch.Start(); for (int j = 0; j < 100000; j++) { object obj = assembly.CreateInstance("ConsoleApp1.Person"); person = obj as Person; } watch.Stop(); Console.Write(watch.ElapsedMilliseconds.ToString().PadLeft(5)); } Console.Write("
"); Console.ReadKey(); }
실행 결 과 는 다음 과 같 습 니 다.

그리고 삼 구조 함수 에서 실례 화 된 코드 와 결 과 를 살 펴 보 겠 습 니 다.

static void Main(string[] args)
  {
   Console.WriteLine("          (  :  )");
   Console.Write("     ");
   for (int i = 1; i <= 10; i++)
    Console.Write("{0:G}", i.ToString().PadLeft(5));
   Console.Write("
"); Console.Write("InstanceByNew".PadRight(20)); for (int i = 1; i <= 10; i++) { Person person = null; Stopwatch watch = new Stopwatch(); watch.Start(); for (int j = 0; j < 100000; j++) person = new Person("Test"+j); watch.Stop(); Console.Write(watch.ElapsedMilliseconds.ToString().PadLeft(5)); } Console.Write("
"); Console.Write("InstanceByActivator".PadRight(20)); for (int i = 1; i <= 10; i++) { Type type = Type.GetType("ConsoleApp1.Person"); Person person = null; Stopwatch watch = new Stopwatch(); watch.Start(); for (int j = 0; j < 100000; j++) { object obj = Activator.CreateInstance(type,new object[]{"Test"+j}); person = obj as Person; } watch.Stop(); Console.Write(watch.ElapsedMilliseconds.ToString().PadLeft(5)); } Console.Write("
"); Console.Write("InstanceByAssembly".PadRight(20)); for (int i = 1; i <= 10; i++) { Assembly assembly = Assembly.Load("InstancePerformance"); Person person = null; Stopwatch watch = new Stopwatch(); watch.Start(); for (int j = 0; j < 100000; j++) { object obj = assembly.CreateInstance("ConsoleApp1.Person", true, System.Reflection.BindingFlags.Default, null, new []{"Test"+j}, null, null); person = obj as Person; } watch.Stop(); Console.Write(watch.ElapsedMilliseconds.ToString().PadLeft(5)); } Console.Write("
"); Console.ReadKey(); }
실행 결 과 는 다음 과 같 습 니 다.
 
결론.
위의 실행 결 과 를 통 해 알 수 있 듯 이 이 세 가지 방식 의 성능 순 서 는?New > Activator > Assembly그러나 어떤 방법 을 사용 할 지 는 상황 에 따라 결정 해 야 한다.
후속
이상 에서 알 수 있 듯 이 New 성능 이 가장 높 고 저 는 New 를 사 용 했 습 니 다.문 제 는 해결 되 지 않 았 습 니 다.문 제 를 List 에 어떤 요소 가 존재 하 는 지 판단 하 는 것 을 가리 키 고 List 중의 Contains,Exists,Any,Where 를 테스트 하기 시 작 했 습 니 다자세 한 내용 은 클릭 하 세 요.
C\#실례 화 대상 의 세 가지 방식 과 성능 대비 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 C\#실례 화 대상 의 세 가지 방식 과 성능 대비 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많이 지 켜 주시 기 바 랍 니 다!

좋은 웹페이지 즐겨찾기