Dictionary와 배열 찾기 효율 비교

8305 단어
오늘 이틀 전의 유니버설 데이터베이스 접근 실체류에서 부치와 수치의 효율을 생각해서 오늘 작은 프로그램 테스트를 하나 썼습니다.
테스트 프로그램 코드:
int Count = 1000000;
            string findName = "Field" + (Count-1).ToString();
            DataEntity[] _ArrTestStr = new DataEntity[Count];
            Dictionary<string, DataEntity> _DictionaryTest = new Dictionary<string, DataEntity>();
            StringBuilder content = new StringBuilder();
            DateTime beginDateTime = DateTime.Now;
            //         
            for (int i = 0; i < Count; i++)
            {
                DataEntity de = new DataEntity();
                de.Value = i.ToString();
                de.Field = "Field" + de.Value;
                _ArrTestStr[i] = de;
            }
            DateTime endDateTime = DateTime.Now;
            content.Append("").Append(beginDateTime.Ticks).AppendLine(beginDateTime.ToString("yyyy-MM-dd HH:mm:ss fff"))
                 .Append("").Append(beginDateTime.Ticks).AppendLine(beginDateTime.ToString("yyyy-MM-dd HH:mm:ss fff"));


            beginDateTime = DateTime.Now;
            for (int i = 0; i < Count; i++)
            {
                DataEntity de = new DataEntity();
                de.Value = i.ToString();
                de.Field = "Field" + de.Value;
                _DictionaryTest.Add(de.Field, de);
            }
            endDateTime = DateTime.Now;
            content.Append(" Dictionary      :").Append(beginDateTime.Ticks).AppendLine(beginDateTime.ToString("yyyy-MM-dd HH:mm:ss fff"))
                  .Append(" Dictionary      :").Append(beginDateTime.Ticks).AppendLine(beginDateTime.ToString("yyyy-MM-dd HH:mm:ss fff"));


            int index = 0;
            DataEntity NewDE = null;
            beginDateTime = DateTime.Now;
            while (index<Count)
            {
                if (_ArrTestStr[index].Field == findName)
                {
                    NewDE = _ArrTestStr[index];
                    break;
                }
                index++;
            }
            endDateTime = DateTime.Now;
           
            content.Append("").AppendLine(NewDE.Value)
                .Append("").Append(beginDateTime.Ticks).AppendLine(beginDateTime.ToString("yyyy-MM-dd HH:mm:ss fff"))
                 .Append("").Append(beginDateTime.Ticks).AppendLine(beginDateTime.ToString("yyyy-MM-dd HH:mm:ss fff"));


            beginDateTime = DateTime.Now;
            NewDE = _DictionaryTest[findName];
            endDateTime = DateTime.Now;
            content.Append("Dictionary      :").AppendLine(NewDE.Value)
               .Append("").Append(beginDateTime.Ticks).AppendLine(beginDateTime.ToString("yyyy-MM-dd HH:mm:ss fff"))
                .Append("").Append(beginDateTime.Ticks).AppendLine(beginDateTime.ToString("yyyy-MM-dd HH:mm:ss fff"));
            textBox1.Text = content.ToString();

프로그램 실행 결과:
그룹 할당 시작 시간: 6348196539849141122012-08-30 23:38 491 그룹 할당 종료 시간: 634819653984914122012-08-30 23:16:38 491 Dictionary 할당 시작 시간: 634819653995374710 2012-08-30 23:139 537 Dictionary 할당 종료 시간: 634819653995374710 2012-08-30 23:3939 536 그룹에서 찾은 값은 99999999 1088965 1962-3012341 2341찾기 시간: 6348196540108655962012-08-30 23:16:41 086 Dictionary 찾기 시작한 값: 9999999 시작 시간: 6348196540112756192012-08-30 23:16:41 127 끝 찾기 시간: 63481965401112756 192012-08-30 23:41 127
 
 
결론: 부가가치와 검색 효율은 기본적으로 같고 10만 번 순환했다
전재 대상:https://www.cnblogs.com/shunhe316/archive/2012/08/30/2664667.html

좋은 웹페이지 즐겨찾기