Rumah >pembangunan bahagian belakang >C++ >Kenapa `\ d` kurang cekap daripada` [0-9] `dalam C# regex?
C#Ekspresi biasa
Kecekapan lebih rendah daripada : Perbezaan Prestasi Siasatan d
[0-9]
Prestasi baru -baru ini agak tidak disangka -sangka. Biasanya, kecekapan skop watak yang ditentukan harus lebih tinggi daripada set aksara. Di samping itu, walaupun dibandingkan dengan set watak yang lebih panjang,
d
Untuk menjelaskan hasil yang mengejutkan ini, marilah kita meneroka beberapa sebab yang mungkin: [0-9]
[0123456789]
<.> 1. Unicode pengiktirafan digital: d
mewakili semua nombor Unicode, bukan hanya 10 aksara yang dinyatakan dalam
. Unicode mengandungi nombor lain dari pelbagai bahasa, seperti angka Parsi (۱۲۳۴۵۶۷۸۹). Julat yang lebih luas ini boleh memperkenalkan overhead pengiraan tambahan, dengan itu mengurangkan kecekapan. Untuk menerangkan konsep ini, kita boleh menggunakan kod berikut untuk menghasilkan senarai semua nombor Unicode:
d
ini akan menghasilkan rentetan panjang yang mengandungi aksara berikut (dan aksara lain): [0-9]
d
٠١٢٣٤٥٦٧٨٩۰۱۲۳۴۵۶۷۸۹߀߁߂߃߄߅߆߇߈߉०१२३४५६७८९০১২৩৪৫৬৭৮৯੦੧੨੩੪੫੬੭੮੯૦૧૨૩૪૫૬૭૮૯
<code class="language-csharp">StringBuilder sb = new StringBuilder(); for (UInt16 i = 0; i < 0x10FFFF; i++) { if (char.IsDigit((char)i)) { sb.Append((char)i); } } string allUnicodeDigits = sb.ToString();</code>enjin ekspresi biasa boleh mencapai
dan
dengan cara yang berbeza, yang mungkin membawa kepada perbezaan prestasi. C#Enjin ekspresi biasa secara khusus boleh mengoptimumkanuntuk meningkatkan kecekapan, dan julat yang lebih luas
boleh mengehadkan pengoptimuman tersebut.Kesimpulan:
Walaupun ia mengejutkan pada mulanya, d
prestasi yang lebih perlahan dapat dikaitkan dengan pengiktirafan pengembangannya terhadap nombor Unicode. Apabila menggunakan set nombor terhad (seperti 0-9), [0-9]
atau [0-9]
boleh memberikan kecekapan yang lebih baik. Walau bagaimanapun, jika anda perlu memadankan pelbagai nombor dari bahasa yang berbeza, d
masih merupakan alat yang berkuasa.
Atas ialah kandungan terperinci Kenapa `\ d` kurang cekap daripada` [0-9] `dalam C# regex?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!