从数据表中找到每一行的大小

时间:2019-10-09 10:18:46

标签: c# sql-server sqlbulkcopy

我必须动态查找批量副本的批处理大小,以避免可能的超时时间错误。 我打算通过查找行大小来做到这一点。如果每行的大小更大,则减小批处理的大小。

这是我尝试过的

var values = new object[data.Length];
// add row values to values 
dataTable.Rows.Add(values);
if (Marshal.SizeOf(values) > 2000)
   moreThan2000++;

基于moreThan2000,我将更新批次大小。但是,当我尝试使用Marshal.SizeOfsizeof来获取值时,我就遇到了错误

  

类型'System.Object []'不能作为非托管结构进行封送;   无法计算出有意义的尺寸或偏移量

  1. 有什么方法可以从DataTable中找到行大小吗?
  2. 是否存在基于系统规范和输入来动态查找批次大小的现有方法?

1 个答案:

答案 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将是您使用的内存。