Мне нужно хранить / предоставлять необработанные двоичные данные (содержимое двоичных файлов) в моих классах. Какой тип я должен использовать?
Опции, которые я рассмотрел до сих пор:
byte[]
Это генерирует предупреждение CA1819 :
Массивы, возвращаемые свойствами, не защищены от записи, даже если свойство доступно только для чтения. Чтобы защитить массив от несанкционированного доступа, свойство должно возвращать копию массива. Как правило, пользователи не понимают негативных последствий для производительности при вызове такого свойства. В частности, они могут использовать это свойство как индексированное свойство.
MemoryStream
MemoryStream
равно IDisposable
, поэтому владелец будет нести ответственность за его утилизацию, но ссылка на MemoryStream
может пережить владельца. Один из вариантов - просто не удалять поток, поскольку он не требует этого.
A MemoryStream
также не является поточно-ориентированным, поэтому следует внимательно следить за положением потока Конечно, потребители могут использовать GetBuffer
, но это не намного безопаснее, чем вариант 1.
UPDATE
ReadOnlyList<byte>
Я беспокоюсь о производительности. Эти двоичные данные часто нужно передавать во внешний код с помощью byte[]
, получая, что byte[]
из ReadOnlyList<byte>
влияет на производительность.