不久前,我编写了一个收集公共交通中断的系统。有关任何事件的信息都收集在MSSQL数据库中。消费者通过调用.asmx Web服务来访问这些数据。使用ADO.NET从数据库中收集数据,然后每个数据行填充一个Deviation对象并添加到List中。在服务层中,列表应用ToArray()调用并返回给使用者。
到目前为止,这么好。但问题是在某些情况下(5%左右),我们已经意识到数组会以某种方式被缩减。而不是通常的15-20件物品,只返回一半,甚至更少。其余项目始终位于原始列表的末尾。并且,更少的时间,在阵列的开头重复/洗牌几个项目。
在对不同层进行一些测试之后,似乎缩减在进程结束时发生,即在转换为数组或SOAP序列化期间。但是代码看起来很无辜,呵呵?:
[WebMethod]
public Deviation[] GetDeviationsByTimeInterval(DateTime from, DateTime to)
{
return DeviRoutines.GetDeviationsByTimeInterval(from, to).ToArray();
}
我不是100%确定SQL或数据访问层中没有发生错误,但是他们已经证明在测试期间可以完成它们的工作。任何关于这个问题的帮助都会有很大的帮助! :)
答案 0 :(得分:0)
我会做类似的事情:
public Deviation[] GetDeviationsByTimeInterval(DateTime from, DateTime to)
{
var v1 = DeviRoutines.GetDeviationsByTimeInterval(from, to);
LogMe( "v1: " + v1.Count );
var v2 = v1.ToArray();
LogMe( "v2: " + v2.Length );
return v2;
}
证明您的期望通常会付出: - )
答案 1 :(得分:0)
http://msdn.microsoft.com/en-us/library/x303t819.aspx
类型:T []包含副本的数组 列表的元素。
你没有在.NET中找到错误,它很可能是你GetDeviationsByTimeInterval
答案 2 :(得分:0)
我愿意打赌ToArray
正在做的事情正是如此,但您的from
或to
值偶尔会出现垃圾(验证错误?)或{{1}因某种原因误解了它们。
将一些记录粘贴到GetDeviationsByTimeInterval
和Deviation[]
以查看传递给它的值,下次它变成梨形时,您将能够诊断出问题所在。< / p>