0
У меня есть таблица с сырыми выводами в SQL, я использую SQL Command Reader для циклического прохождения таблицы и десериализации данных. Метод десериализации бросает исключение System.OutOfMemory.Исключить из памяти исключение при десериализации байтового массива
Я использую .Net 4.5 и SQL Server 2014.
using (SqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
byte[] ioNames = null;
long ioNamesArraySize = rdr.GetBytes(ApplicationConstants.ord_IONames, 0, null, 0, 0);
ioNames = new byte[ioNamesArraySize];
ioNames = (byte[])rdr[ApplicationConstants.ord_IONames];
// Get the data.
byte[] outputs = null;
long outputsArraySize = rdr.GetBytes(ApplicationConstants.ord_RawData, 0, null, 0, 0);
outputs = new byte[outputsArraySize];
outputs = (byte[])rdr[ApplicationConstants.ord_RawData];
// Extract the InstrumentOutputNames and Outputs.
object[][] data = null;
data = outputs.DeserializeFromByteArray<object[][]>();
// The below line throws the exception.
var iPms = ioNames.DeserializeFromByteArray<IEnumerable<InstrumentParameter>>();
iPms = iPms.ToList();
}
/// <summary>
/// Deserializes the specified byte array.
/// </summary>
/// <typeparam name="T">Type to Use</typeparam>
/// <param name="byteArray">The byte array.</param>
/// <returns>T.</returns>
public static T DeserializeFromByteArray<T>(this byte[] byteArray)
{
using (var ms = new MemoryStream(byteArray))
{
return (T)new BinaryFormatter().Deserialize(ms);
}
}
Что такое ioNames? Вы имели в виду вызов outputs.DeserializeFromByteArray вместо этого? – Polyfun
@Polyfun - Спасибо, что посмотрели на это. Моя ошибка, я обновил код сейчас. Не стесняйтесь задавать вопросы, если они есть. – Abe
@SuperOil - Спасибо, вы редактируете вопрос, который будет более читаемым, я довольно новичок в StackOverflow, который все еще учится. – Abe