2011-02-23 62 views
2

比方說,我有基於內存的數據表是這樣的:拳擊在數據表/拆箱和LINQ

DataTable dt = new DataTable(); 
dt.Columns.Add("c1", System.Type.GetType("System.Double")); 
dt.Columns.Add("c2", System.Type.GetType("System.Double")); 
... 

DataRow row = dt.AddRow(); 
row["c1"] = 1; 
row["c2"] = 2; 
... 

然後我查詢這個表:

List<DataRow> rows = (from r in table where (double)r["c1"] < 2.0 select r).ToList(); 

而在探查我看到它創造了很多雙打。我認爲它與比較有關。

任何想法如何擺脫這種不必要的內存分配?

我使用.NET 4,VS 2010,C#。

回答

4

此處的底層存儲位於類型數組中(在本例中爲DoubleStorage類),但所有訪問都通過object進行,因爲沒有通用API。你不能避免拳擊,除非你切換到沒有DataTable的基於類的模型。