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);
}
}
Was ist ioNames? Hast du vor, outputs.DeserializeFromByteArray stattdessen aufzurufen? – Polyfun
@Polyfun - Vielen Dank dafür. Meine Schuld, ich habe den Code jetzt aktualisiert. Fühlen Sie sich frei, Fragen zu stellen, wenn überhaupt. – Abe
@SuperOil - Vielen Dank, die Änderungen werden die Frage lückenhafter machen, ich bin noch recht neu bei StackOverflow. – Abe