2017-02-17 2 views
0

Ich habe eine Tabelle mit Raw-Ausgaben in SQL. Ich verwende SQL Command Reader, um eine Tabelle durchzulaufen und Daten zu deserialisieren. Bei der Deserialisierungsmethode wird die System.OutOfMemory-Ausnahme ausgelöst.Systemspeicherausnahme beim Deserialisieren eines Byte-Arrays

Ich verwende .NET 4.5 und 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

Was ist ioNames? Hast du vor, outputs.DeserializeFromByteArray stattdessen aufzurufen? – Polyfun

+0

@Polyfun - Vielen Dank dafür. Meine Schuld, ich habe den Code jetzt aktualisiert. Fühlen Sie sich frei, Fragen zu stellen, wenn überhaupt. – Abe

+0

@SuperOil - Vielen Dank, die Änderungen werden die Frage lückenhafter machen, ich bin noch recht neu bei StackOverflow. – Abe

Antwort

0

fristly Dank an alle für die in diese suchen. Dieses Problem wird gelöst, indem einfach die Eigenschaften des Anwendungs-Builds geändert werden.

  • Uncheck Bevorzugen 32 bit
  • Select 64 bit keine CPU.

Das funktioniert gut. Hoffe jemand wird das hilfreich finden.

Verwandte Themen