Кто-нибудь знает более быстрый метод выполнения String.Split()?
Следует отметить, что split()
- сомнительный dot-net подход к синтаксическому csv анализу файлов CSV на случай, если .csv вы встретите в файле запятые, например:
1,"Something, with a comma",2,3
Еще csharp одна вещь, на которую я укажу, не str зная, как вы профилировали, - это dot-net будьте осторожны при профилировании .csv такого рода низкоуровневых performance деталей. Детализация таймера speed Windows / ПК может иметь speed значение, и у вас могут возникнуть csharp значительные накладные расходы string-manipulation при простом цикле, поэтому performance используйте какое-то контрольное string-manipulation значение.
При этом split()
создан efficiency для обработки регулярных .net-framework выражений, которые, очевидно, сложнее, чем dotnet вам нужно (и в любом случае c# это неправильный инструмент c#.net для работы с экранированными c-sharp запятыми). Кроме того, split()
создает .csv множество временных объектов.
Итак, если c# вы хотите его ускорить (и dot-net я не могу поверить, что производительность dotnet этой части действительно c# является проблемой), тогда efficiency вы хотите сделать это вручную csv и повторно использовать свои c# буферные объекты, чтобы вы performance не создавали постоянно объектов c#.net и поручить сборщику мусора strings очистить их.
Алгоритм для speed этого относительно прост:
- Останавливаться на каждой запятой;
- Когда вы нажимаете кавычки, продолжайте, пока не нажмете следующий набор кавычек;
- Обрабатывать экранированные кавычки (например, \ ") и, возможно, экранированные запятые (\,).
О, и slow чтобы дать вам некоторое strings представление о стоимости c# регулярных выражений, возник efficiency вопрос (Java, а не C#, но tsv принцип был тот же), когда dotnet кто-то хотел заменить каждый performance n-й символ строкой. Я предложил .net-framework использовать replaceAll()
в строке. Джон performance Скит вручную закодировал speed цикл. Из любопытства я сравнил speed две версии, и он оказался efficiency на порядок лучше.
Итак, если tsv вам действительно нужна производительность, пора str заняться синтаксическим анализом.
Или, что c-sharp еще лучше, используйте другое csharp оптимизированное решение, подобное string-manipulation этому fast CSV reader.
Между прочим, хотя .net это и относится к Java, это dot-net касается производительности .net-framework регулярных выражений в целом c# (что является универсальным) и c# replaceAll()
по сравнению с вручную закодированным dotnet циклом: Putting char into a java string for each N characters.
c#
.net
performance
string
csv
Кто-нибудь знает более быстрый метод выполнения String.Split()?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.