列表与LT;>在ToArray()期间丢失的项目?

时间:2011-06-14 14:15:26

标签: c# generics soap ado.net

不久前,我编写了一个收集公共交通中断的系统。有关任何事件的信息都收集在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或数据访问层中没有发生错误,但是他们已经证明在测试期间可以完成它们的工作。任何关于这个问题的帮助都会有很大的帮助! :)

3 个答案:

答案 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正在做的事情正是如此,但您的fromto值偶尔会出现垃圾(验证错误?)或{{1}因某种原因误解了它们。

将一些记录粘贴到GetDeviationsByTimeIntervalDeviation[]以查看传递给它的值,下次它变成梨形时,您将能够诊断出问题所在。< / p>