C# 类型为';System.OutOfMemoryException';在.dll中发生,但未在用户代码中处理

C# 类型为';System.OutOfMemoryException';在.dll中发生,但未在用户代码中处理,c#,sql-server,list,out-of-memory,C#,Sql Server,List,Out Of Memory,我在sql server中有一个带有 行数:1229502 列数:56 TotatlSpaceInKB:292616 当我获取完整的表并用C#填充DataTable时,它会给出一个“System.OutOfMemoryException”。 所以我决定把表分成两块,填充两个不同的数据表,这很有效 但根据要求,我必须将所有数据存储在列表中, 不幸的是,将两个数据表存储在同一个列表中会产生异常。 将一个表转换为列表会很顺利,但当我将第二个表存储在同一个列表中时,会出现错误 我通过以下代码将DataT

我在sql server中有一个带有
行数:1229502
列数:56
TotatlSpaceInKB:292616

当我获取完整的表并用C#填充DataTable时,它会给出一个“System.OutOfMemoryException”。
所以我决定把表分成两块,填充两个不同的数据表,这很有效

但根据要求,我必须将所有数据存储在列表中,
不幸的是,将两个数据表存储在同一个列表中会产生异常。 将一个表转换为列表会很顺利,但当我将第二个表存储在同一个列表中时,会出现错误

我通过以下代码将DataTable转换为List

//CC_Data is DataTable
//CC_List is List<Cent_Compilation>
//Cent_Compilation is class with same properties as in Database
foreach (DataRow row in CC_Data.Rows)
                {
                    Compilation_Methods.CC_List.Add(Compilation_Methods.populateClassObject(row, CC_Data));
                }
这就是异常的情况:


您是否正在用64位构建代码?这将允许您为应用程序分配更多的内存。这不会解决使用大量内存的潜在问题,但应该可以减轻内存不足错误。我以前用64位编译我的软件,将8gb的数据加载到一个列表中。@NibblyPig无论如何,他在
Cent\u编译
构造函数中有一个异常是很奇怪的。你能反编译它吗?@NibblyPig这是一个组织的应用程序他们想让我用32位、、、@Brainiac构建它我怀疑你的内存出现了问题,因为列表是如何分配内存的。。。特别是如果列表中的对象是85k+的话,它会被分配为堆上的一个大对象,这有点麻烦。。。列表本质上也是一个具有固定大小的ArrayList。。。添加项目时,如果您到达边界,将导致创建一个新列表,其大小将增加一倍。。。看看这个分块列表解决方案。。。问题很简单:您不能一次加载所有数据。解决方案:增加内存或以不同方式管理数据,显然您不能将所有记录都放在一个列表中。。。我想知道为什么你每次都要把它记在记忆里
public static Cent_Compilation populateClassObject(DataRow row, DataTable table)
        {
            using (Cent_Compilation CC = new Cent_Compilation())
            {
                try
                {
                    PropertyInfo[] columns;

                    Type myType = (typeof(Cent_Compilation));
                    columns = myType.GetProperties(BindingFlags.Public | BindingFlags.Instance);

                    object data = null;
                    foreach (var column in columns)
                    {

                        if (table.Columns.Contains(column.Name))
                        {
                            data = DBSupport.ExtractData(row, column.Name);
                            if (data != null)
                            {
                                column.SetValue(CC, DBSupport.FindNReplaceDataType(data, column.PropertyType), null);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {

                    //Log.Add("Error in Method populateClassObject Class Inter_Data" + ex.Message);
                }

                return CC;
            }
        }