Guid
を文字列として比較しないでください。既存のGuid
と比較するための文字列を新しいGuid
という形式で作成しないでください。
パフォーマンスは別として、文字列としてGuid
を表す単一の標準フォーマットがないため、互換性のないフォーマットを比較する危険性があり、大文字と小文字を無視する必要があります。String.Compare
を設定するか、小文字
はるかに慣用とパフォーマンスの方法は、読み取り専用Guid
定数文字列値からおよびネイティブのGuidの平等を使用してすべての比較に、静的を作成することです:
const string sid = "3f72497b-188f-4d3a-92a1-c7432cfae62a";
static readonly Guid guid = new Guid(sid);
void Main()
{
Guid gid = Guid.NewGuid(); // As an example, say this comes from the db
Measure(() => (gid.ToString().ToLower() == sid.ToLower()));
// result: 563 ms
Measure(() => (gid == new Guid(sid)));
// result: 629 ms
Measure(() => (gid == guid));
// result: 10 ms
}
// Define other methods and classes here
public void Measure<T>(Func<T> func)
{
Stopwatch sw = new Stopwatch();
sw.Start();
for(int i = 1;i<1000000;i++)
{
T result = func();
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
}
だから、文字列の比較から新しいGuid
を作成します定数値から作成された静的な読み取り専用Guid
とGuid
を比較する場合に比べて、50〜60倍のコストがかかります。
自分でプロファイルしてみませんか? –
「他のものがあるかどうかわからないから」 –
文字列として比較する必要がありますか?それらを比較する最も良い方法は、おそらくあなたが何百万回も連続して何かをやっているのでなければ、それらを 'Guid'タイプ(すなわち' gid == new Guid(sid); ')として比較することです。 – itsme86