Кто-нибудь знает более быстрый метод выполнения 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

2022-10-09T08:27:56+00:00