我必须动态查找批量副本的批处理大小,以避免可能的超时时间错误。 我打算通过查找行大小来做到这一点。如果每行的大小更大,则减小批处理的大小。
这是我尝试过的
var values = new object[data.Length];
// add row values to values
dataTable.Rows.Add(values);
if (Marshal.SizeOf(values) > 2000)
moreThan2000++;
基于moreThan2000
,我将更新批次大小。但是,当我尝试使用Marshal.SizeOf
或sizeof
来获取值时,我就遇到了错误
类型'System.Object []'不能作为非托管结构进行封送; 无法计算出有意义的尺寸或偏移量
答案 0 :(得分:1)
没有任何精确的方法来计算托管对象的大小,但是您可以使用GC.GetTotalMemory进行粗略估算。
类似这样的东西:
long start = GC.GetTotalMemory(true);
var values = new object[data.Length];
// add row values to values
dataTable.Rows.Add(values);
long used = GC.GetTotalMemory(true) - start;
used
将是您使用的内存。