为了验证实体对象的属性值是否合法,其实就是验证各字段的MaxLength,Range,Required等属性标签,我在Model父类中写了这个方法,代码如下,
///
///验证实体的数据是否符合要求///
/// 被验证的实体
/// 符合返回true
public static bool IsValid(thisParent p)
{try{var context = new ValidationContext(p, null, null);var results = new List();
TypeDescriptor.AddProviderTransparent(newAssociatedMetadataTypeTypeDescriptionProvider(p.GetType()), p.GetType());bool isValid = Validator.TryValidateObject(p, context, results, true);returnisValid;
}finally{
GC.Collect();
}
}
我还特意加了个finally,在每次调用完成都强制垃圾回收..
可是调用这个方法次数一多,就报下边这个异常了,大约在9030到9050次之间就会出这个异常..
我的测试代码如下:
Item_Prop是Parent的子类.
你可能会问,干嘛要调用这么多次...
好吧,其实我在BaseDAO里写了一个TransInsert(List list){}的方法,
这个方法用于向数据库中批量插入一批实体数据.
在foreach list时,对每个item进行IsValid()验证...于是,list项一多就出现上边的异常了..
同一个list中,item超9030之后就会出现这个异常了,
还有一种情况是,我有多个list..
list listA
listlistB
listlistN
即使每个list中的项不到9000,只有100到500项,分别将这多个(N个)list插入时,也会出现那个异常...
我总结了一下,就是IsValid()方法调用次数一多,就会报那个异常...
请问这个方法为什么会导致这个异常?怎么解决?谢谢!
开始我还以为是插入到数据库中的时候出了问题呢..后来将这句注释掉之后就正常了.