Stringのいくつかの比較方法の比較(Compare,CompareTo,CompareOrdinal,Equals)

2522 ワード

Stringクラス文字列の比較には、Compare()、CompareTo()、CompareOrdinal()、Equals()の4つの方法があります.Compare()メソッドはCompareTo()の静的バージョンである.一方、Equals()は"=="と等価であり、"="演算子を使用する限り、Equals()メソッドが呼び出される.CompareOrdinal()は、ローカライズ言語や文化を考慮せずに2つの文字列を比較します.
テスト比較コードを見てください.
const int Num = 10000000;
            string s1 = "abcdefgh";
            string s2 = "abcdefgh";

            //string s1 = "abcdefgh";
            //string s2 = "amklklkl";
            int end;
            //Compare
            int start = Environment.TickCount;
            for (int i = 0; i < Num; i++)
            {
                string.Compare(s1, s2);
            }
            end=Environment.TickCount;
            Console.WriteLine("Compare : " + (end - start));

            //CompareTo
            start = Environment.TickCount;
            for (int i = 0; i < Num; i++)
            {
                s1.CompareTo(s2);
            }
            end = Environment.TickCount;
            Console.WriteLine("CompareTo : " + (end - start));

            //CompareOrdinal
            start = Environment.TickCount;
            for (int i = 0; i < Num; i++)
            {
                string.CompareOrdinal(s1, s2);
            }
            end = Environment.TickCount;
            Console.WriteLine("CompareOrdinal : " + (end - start));

            // Equals
            start = Environment.TickCount;
            for (int i = 0; i < Num; i++)
            {
                string.Equals(s1, s2);
            }
            end = Environment.TickCount;
            Console.WriteLine(" Equals : " + (end - start));

            // Equals
            start = Environment.TickCount;
            for (int i = 0; i < Num; i++)
            {
                s1.Equals(s2);
            }
            end = Environment.TickCount;
            Console.WriteLine(" Equals : " + (end - start));
のうち、s 1とs 2が等しい場合と等しくない場合の2つである.結果:
 
1.Compareは伝達する文化情報によって対応する比較を呼び出し、CompareToは現在のスレッドに関連する文化情報を呼び出す.これは、国際化を行う場合、文字列比較にStringを使用する必要があることを意味する.Compare静的メソッド.そしてCompare法は静的なので、できるだけStringを使うことをお勧めします.CompareToメソッドの代わりにCompareメソッドが!の
2.CompareOrdinalは、文字列全体を5文字(10バイト)ごとにグループ化し、1つずつ比較し、最初の異なるASCIIコードを見つけてループを終了します.そして両者のASCIIコードの差を求める.しかし、マイクロソフトがなぜこれを実現するのがこんなに面倒なのか理解できません.しかしCLR via C#には、この方法が他の方法よりも速いという話があります.きっと理にかなっていると思います.
だから私たちが大きさを比較するときは、できるだけCompareOrdinalメソッドを使用します.
3.Equalsは非セキュリティコードの比較なので、私たちがセキュリティコードを使うよりも効率が高いです.