2017-02-17 32 views
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); 
    } 
} 
+0

Что такое ioNames? Вы имели в виду вызов outputs.DeserializeFromByteArray вместо этого? – Polyfun

+0

@Polyfun - Спасибо, что посмотрели на это. Моя ошибка, я обновил код сейчас. Не стесняйтесь задавать вопросы, если они есть. – Abe

+0

@SuperOil - Спасибо, вы редактируете вопрос, который будет более читаемым, я довольно новичок в StackOverflow, который все еще учится. – Abe

ответ

0

Fristly спасибо всем за глядя на это. Эту проблему можно решить, просто изменив свойства сборки приложения.

  • Uncheck Предпочитают 32 бит
  • Select 64 Бит не любой процессор.

Это прекрасно работает. Надеюсь, кто-то найдет это полезным.