【发布时间】:2012-02-19 20:16:51
【问题描述】:
我有一个导入数千个文件的 c#(.Net 3.5) 应用程序。现在,我为每个文件创建后台工作者。它在一定限度内都能正常工作,然后应用程序因系统内存不足异常而死掉。我假设这是由于大量线程而发生的。对于这种情况,线程池是一个好的解决方案吗?
例外是:
System.OutOfMemoryException | Exception of type 'System.OutOfMemoryException' was thrown.
at System.Data.RBTree`1.TreePage..ctor(Int32 size)
at System.Data.RBTree`1.AllocPage(Int32 size)
at System.Data.RBTree`1.InitTree()
at System.Data.Index.InitRecords(IFilter filter)
at System.Data.Index..ctor(DataTable table, Int32[] ndexDesc, IndexField[] indexFields,
Comparison`1 comparison, DataViewRowState recordStates, IFilter rowFilter)
at System.Data.DataTable.GetIndex(IndexField[] indexDesc, DataViewRowState recordStates, IFilter
rowFilter)
at System.Data.DataColumn.get_SortIndex()
at System.Data.DataColumn.IsNotAllowDBNullViolated()
at System.Data.DataTable.EnableConstraints()
at System.Data.DataTable.set_EnforceConstraints(Boolean value)
at System.Data.DataTable.EndLoadData()
at System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String
srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn
parentChapterColumn, Object parentChapterValue)
at System.Data.Common.DataAdapter.Fill(DataTable[] dataTables, IDataReader dataReader, Int32
startRecord, Int32 maxRecords)
at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32
startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32
maxRecords, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)
at Dms.Data.Adapters.DataTableAdapterBase`2.FillByCommand(TTbl table, DbCommand command)
【问题讨论】:
-
更新了问题。它在 c# 中。谢谢。
-
如果您的应用程序是 32 位的并且您在内存中加载了超过 1.5 GB 的数据,您可能会遇到内存不足异常。有关更多信息,请参阅此问题:stackoverflow.com/questions/1109558/… 那么您是否一次加载超过 1.5 GB 的数据?
-
您是将数千个文件中的数据导入应用程序的某个内部集合,还是将数据放入数据库或类似的东西中?
-
我不知道您使用的是什么版本的 .net,但看看这个可能会有所帮助:codeproject.com/Articles/12551/…
-
我正在导入文件并将它们放入数据库中。
标签: c# multithreading threadpool