Sto utilizzando VSTS2008 + C# + .Net 3.5 per eseguire questa applicazione console su x64 Server 2003 Enterprise con memoria fisica 12G.strana eccezione di memoria esaurita durante la serializzazione
Ecco il mio codice e trovo quando si esegue l'istruzione bformatter.Serialize (stream, table), c'è un'eccezione di memoria insufficiente. Ho monitorato l'utilizzo della memoria tramite la scheda Perormance di Task Manager e trovo che viene utilizzata solo la memoria fisica 2G quando viene generata un'eccezione, quindi non dovrebbe essere esaurita la memoria. :-(
Delle idee che cosa è sbagliato Qualsiasi limitazione di .Net serializzazione
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;
}
grazie in anticipo, George
(risposto ai commenti) –
Grazie Marc, la risposta è così grande e mi hanno segnato come risposta. Apprezza se puoi condividere la tua esperienza sulla memoria virtuale qui, http://stackoverflow.com/questions/1297797/windows-32-bit-virtual-memory-page-mapping-issue – George2