DataTables和LINQ中的装箱/拆箱

Sha*_*kov 2 .net 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;
...
Run Code Online (Sandbox Code Playgroud)

然后我查询这个表:

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

在剖析器中,我看到它创造了很多双打.我认为它与比较有某种关系.

任何想法如何摆脱这种不必要的内存分配?

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

Mar*_*ell 5

这里的底层存储是一个类型化的数组(在本例中是在DoubleStorage类中),但所有访问都是通过的object,因为没有通用的API.除非你没有切换到基于类的模型,否则你无法避免拳击DataTable.