Jaki jest najszybszy sposób analizowania ciągów w języku C#?Szybkie parsowanie ciągów w C#
Obecnie używam tylko indeksowania ciągów (string[index]
) i kod działa rozsądnie, ale nie mogę pomóc, ale myślę, że ciągły zakres sprawdzania, czy indeksujący akcesor musi coś dodawać.
Zastanawiam się, jakie techniki powinienem rozważyć, aby to zwiększyć. To są moje wstępne przemyślenia/pytania:
- Stosować metody jak
string.IndexOf()
iIndexOfAny()
znaleźć znaki zainteresowania. Czy są one szybsze niż ręczne skanowanie ciągu znaków przezstring[index]
? - Użyj regex. Osobiście nie lubię wyrażenia regularnego, ponieważ uważam je za trudne do utrzymania, ale czy są one prawdopodobnie szybsze niż ręczne skanowanie ciągu znaków?
- Użyj niebezpiecznego kodu i wskaźników. To wyeliminowałoby sprawdzanie zakresu indeksu, ale czytałem, że ten niebezpieczny kod nie działa w niezaufanych środowiskach. Jakie są dokładnie tego konsekwencje? Czy to oznacza, że cały zespół nie załaduje się/uruchomi, czy tylko kod oznaczony jako niebezpieczny odmówić uruchomienia? Biblioteka mogłaby potencjalnie być używana w wielu środowiskach, więc aby móc powrócić do wolniejszego, ale bardziej kompatybilnego byłoby miło.
- Co jeszcze mogę wziąć pod uwagę?
NB: Powinienem powiedzieć, że ciągi, które analizuję, mogą być dość duże (powiedzmy 30k) oraz w niestandardowym formacie, dla którego nie ma standardowego parsera .NET. Ponadto, wykonanie tego kodu nie jest zbyt krytyczne, więc jest to po części teoretyczna kwestia ciekawości.
Bardzo trudno jest odpowiedzieć, jeśli nie podasz więcej szczegółów/kodu, aby wyjaśnić, co dokładnie i jak "parsuje". – Grzenio
Nie chcę być dla ciebie niegrzeczny, ale to wygląda na przedwczesną optymalizację, znak ostrzegawczy programisty z wykształceniem C. Prawdopodobnie masz na to więcej pilnych problemów. – reinierpost
@reinierpost: Czy tęskniłeś za tym, że PO powiedział "częściowo tylko teoretyczne pytanie o ciekawość"? – LukeH