Estoy usando VSTS2008 + C# + .Net 3.5 para ejecutar esta aplicación de consola en x64 Server 2003 Enterprise con memoria física 12G.extraña excepción de falta de memoria durante la serialización
Aquí está mi código, y me parece que al ejecutar la instrucción bformatter.Serialize (stream, table), hay una excepción de falta de memoria. Supervisé el uso de la memoria a través de la pestaña Perormance del Administrador de tareas y me parece que solo se utiliza la memoria física 2G cuando se lanza la excepción, por lo que no debería estar fuera de la memoria. :-(
Cualquier idea lo que está mal Cualquier limitación de .Net serialización
static DataTable MakeParentTable()
{
// Create a new DataTable.
System.Data.DataTable table = new DataTable("ParentTable");
// Declare variables for DataColumn and DataRow objects.
DataColumn column;
DataRow row;
// Create new DataColumn, set DataType,
// ColumnName and add to DataTable.
column = new DataColumn();
column.DataType = System.Type.GetType("System.Int32");
column.ColumnName = "id";
column.ReadOnly = true;
column.Unique = true;
// Add the Column to the DataColumnCollection.
table.Columns.Add(column);
// Create second column.
column = new DataColumn();
column.DataType = System.Type.GetType("System.String");
column.ColumnName = "ParentItem";
column.AutoIncrement = false;
column.Caption = "ParentItem";
column.ReadOnly = false;
column.Unique = false;
// Add the column to the table.
table.Columns.Add(column);
// Make the ID column the primary key column.
DataColumn[] PrimaryKeyColumns = new DataColumn[1];
PrimaryKeyColumns[0] = table.Columns["id"];
table.PrimaryKey = PrimaryKeyColumns;
// Create three new DataRow objects and add
// them to the DataTable
for (int i = 0; i <= 5000000; i++)
{
row = table.NewRow();
row["id"] = i;
row["ParentItem"] = "ParentItem " + i;
table.Rows.Add(row);
}
return table;
}
static void Main(string[] args)
{
DataTable table = MakeParentTable();
Stream stream = new MemoryStream();
BinaryFormatter bformatter = new BinaryFormatter();
bformatter.Serialize(stream, table); // out of memory exception here
Console.WriteLine(table.Rows.Count);
return;
}
gracias de antemano, George
(respondió a los comentarios) –
Gracias Marc, su respuesta es tan grande y me han marcado como respuesta. Apreciar si pudieras compartir tu experiencia sobre la memoria virtual aquí, http://stackoverflow.com/questions/1297797/windows-32-bit-virtual-memory-page-mapping-issue – George2