Я работаю с довольно большим набором строк, которые мне нужно обрабатывать как можно быстрее.C# performance - Regex vs. multiple Split
Формат довольно исправлено:
[name]/[type]:[list ([key] = [value],)]
или
[name]/[type]:[key]
Я надеюсь, что мое представление в порядке. Это означает, что у меня есть слово (в моем случае я называю это Name
), затем косой чертой, затем следуют другое слово (я называю это Type
), затем двоеточие, и за ним следует либо разделенный запятыми список пары ключ-значение (key
=
value
) или один ключ.
Name
, Type
не может содержать никаких пробелов, однако поля могут быть key
и value
.
В настоящее время я использую Regex для синтаксического анализа этих данных, и раскол:
var regex = @"(\w+)\/(\w+):(.*)";
var r = new Regex(regex, RegexOptions.IgnoreCase | RegexOptions.Singleline);
var m = r.Match(Id);
if (m.Success) {
Name = m.Groups[1].Value;
Type= m.Groups[2].Value;
foreach (var intern in m.Groups[3].Value.Split(','))
{
var split = intern.Trim().Split('=');
if (split.Length == 2)
Items.Add(split[0], split[1]);
else if (split.Length == 1)
Items.Add(split[0], split[0]);
}
}
Теперь я знаю, что это не самый необязательный случай, но я не уверен, что будет самым быстрым:
- Split строка сначала по
:
затем с помощью/
для первого элемента, и,
для второго, а затем обработать последний список и раскол снова=
- Используйте текущую смесь, как это
- Используйте полностью регулярное выражение на основе
Конечно, я открыт для предложений, моя главная цель состоит в том, чтобы достичь быстрой обработки этой одной строки.
Если ключи или значения могут иметь ':' или '/', вы должны придерживаться регулярного выражения. –
_ «Моя главная цель - добиться самой быстрой обработки этой единственной строки» - так ** измерить ** различные подходы. Вы можете использовать класс Stopwatch для этого: лучше всего сделать это в конфигурации Release, а также запустить тесты несколько раз и использовать средний результат. – stuartd
Регулярное выражение обычно не является оптимальным решением, поскольку оно построено для общих случаев использования (общий код обычно не является оптимальным). Возможно, вам придется подумать о написании собственного кода для этого. –