我正在將文件中的csv數據加載到數據表中進行處理。數據表內存大量消耗
問題是,我想處理幾個文件,我用數據表的測試顯示我巨大的內存消耗 我測試了一個37MB的csv文件和內存增長到240MB,這是很多恕我直言。 我讀過,數據表中有開銷,我可以使用大約70MB,但不是240MB,這意味着它是原始大小的六倍。 我在這裏讀到,數據表需要比POCO更多的內存,但差別太大了。
我把一個內存分析器和看,如果我有內存泄漏,內存在哪裏。我發現,數據表列有6MB到19MB之間填充字符串,數據表大約有20列。這些值是否存儲在列中?爲什麼需要這麼多內存,我該怎麼做才能減少內存消耗。 這種內存消耗數據表似乎無法使用。
有其他人對數據表有這樣的問題,或者我做錯了什麼?
PS:我試了一個70MB的文件,數據表增長到500MB!
確定這裏是一個小型測試用例: 37MB csv-file(21列)讓內存增長到179MB。
private static DataTable ReadCsv()
{
DataTable table = new DataTable();
table.BeginLoadData();
using (var reader = new StreamReader(File.OpenRead(@"C:\Develop\Tests\csv-Data\testdaten\test.csv")))
{
int y = 0;
int columnsCount = 0;
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
var values = line.Split(',');
if (y == 0)
{
columnsCount = values.Count();
// create columns
for (int x = 0; x < columnsCount; x++)
{
table.Columns.Add(new DataColumn(values[x], typeof(string)));
}
}
else
{
if (values.Length == columnsCount)
{
// add the data
table.Rows.Add(values);
}
}
y++;
}
table.EndLoadData();
table.AcceptChanges();
}
return table;
}
你想我們猜測或者你會展示一些代碼讓我們來看看? – Ehsan
我猜你的代碼中必須有其他對象? –
內存很便宜,但:也許這有助於您找到更高效的內存解決方案:http://stackoverflow.com/questions/275269/does-a-datatable-consume-more-memory-than-a-listt – dcaswell