Как записать int в System.Span, это противоположность int.Parse(span)?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как записать int в System.Span, это противоположность int.Parse(span)?

Сообщение Anonymous »

Мне нужно писать и читать большие файлы CSV (значения, разделенные запятыми), которые в основном содержат целочисленные значения, преобразованные в строки. Для эффективного чтения таких файлов в .Net Core введен новый метод Parse для типа int:

Код: Выделить всё

public static int Parse (ReadOnlySpan s,
System.Globalization.NumberStyles style =
System.Globalization.NumberStyles.Integer, IFormatProvider provider = null);
Это позволяет использовать StreamReader для записи символов файла в массив символов. Затем моя программа должна найти позиции символов-разделителей, создать ReadOnlySpan, содержащий символы между двумя разделителями, а затем преобразовать их в int, не создавая сначала строку из них. персонажи. Поскольку мои файлы содержат миллионы значений, отказ от создания миллионов строк должен привести к более быстрому чтению файлов. Надеюсь.
А как насчет записи значений int в виде строк в файл? Традиционно это делается так:

Код: Выделить всё

var int1 = 1;
var int2 = 2;
streamWriter.WriteLine(int1.ToString() + "," + int2.ToString());
Опять же, для каждого int создается строка, а затем еще одна строка для каждой строки. Это создаст миллионы строк, которые необходимо будет удалить.
Я бы предпочел что-то вроде этого:

Код: Выделить всё

char[] charArray = getEmptyCharArray();
var span = new Span(charArray);
int length1 = span.Write(int1);
charArray[length1] = ',';
span = span.Slice(length1 + 1);
int length2 = span.Write(int2);
streamWriter.Write(charArray, 0, length1 + 1 + length2);

Код: Выделить всё

getEmptyCharArray()
предоставляет массив символов, который можно использовать повторно.
К сожалению, в Span нет функции Write() :-(
Итак, вопрос в следующем: как я могу записать int (или DateTime или Decimal или ...) в Span без создания каких-либо объектов, собираемых мусором (строки) ?
Обратите внимание, что любой ответ, данный до 2018 года, вероятно, здесь не нужен, поскольку System.Span появился только в .NET Core 2.1. Также обратите внимание, что. здесь вопрос касается System.Span, а не HTML Span или любого другого Span.

Подробнее здесь: https://stackoverflow.com/questions/587 ... -parsespan
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»