日期:2014-05-18  浏览次数:21057 次

DataSet怎么这么占内存?
写了这样一段代码
DataSet   ds=new   DataSet();
                        DataTable   dt   =   ds.Tables.Add( "dt ");
                        dt.Columns.Add( "c1 ",typeof(Double));
                        dt.Columns.Add( "c2 ",   typeof(Double));
                        dt.Columns.Add( "c3 ",   typeof(Double));
                        dt.Columns.Add( "c4 ",   typeof(Double));
                        dt.Columns.Add( "c5 ",   typeof(Double));
                        dt.Columns.Add( "c6 ",   typeof(Double));
                        dt.Columns.Add( "c7 ",   typeof(Double));
                        dt.Columns.Add( "c8 ",   typeof(Double));
                        dt.Columns.Add( "c9 ",   typeof(Double));
                        for   (int   i   =   1;   i   <   1000000;i++   )
                        {
                                DataRow   dr   =   dt.NewRow();
                                ds.Tables[ "dt "].Rows.Add(dr);
                        }
然后打开任务管理器看占用内存。发现这段代码运行后占用了200M内存。不明白了,每个double   8个字节,每个row应该是72字节,用数组的话总共占用72M内存就足够了吧?dataset里存了什么信息让它占用内存几乎大到三倍呢。

------解决方案--------------------
dataset是把整个表保存在内存,当很大的数据表载入内存是使用dataset是一个问题,如果有多个用户访问同一台计算机,就会导致严重内存消耗
对大量的数据建议用DataReader,
------解决方案--------------------
还需要很多额外的XML标记来框定表格、行和列。此外还有一些额外的属性。自然会比纯粹的数据占用空间大很多。