防止List <t>?</t>的延迟分析

时间:2015-01-12 20:29:04

标签: c#

我正在随机生成一个Sales对象列表:

public class Sale
{
    public string Name { get; set; }
    public List<Product> Products { get; set; }
    public decimal Value
    {
        get { return Products.Sum(p => p.Price); }
    }
}

public class Product
{
    public decimal Price { get; set; }
}

使用此设置:

private void SetProducts()
{
    var seed = (int)(DateTime.UtcNow.Ticks | 0x0000FFFF);
    var random = new Random(seed);
    Products = new List<Product>();
    for(var i = 0; i < 100; i++)
    {
        Products.Add(new Product
        {
            Price = random.Next(500, 1500)
        });
    }
}

private void SetSales()
{
    Sales = new List<Sale>();
    for(var i = 0; i < 100; i++)
    {
        Sales.Add(new Sale{
        Name = "Sale #" + i,
        Products = GetProducts()
        }
    }
}

private List<Product> GetProducts()
{
    var seed = (int) (DateTime.UtcNow.Ticks | 0x0000FFFF);
    var random = new Random(seed);
    var max = random.Next(1, 7);
    var products = new List<Product>();
    for(var i = 0; i < max; i++)
    {
        products.Add(Products[random.Next(Products.Count)];
    }
    return products;
}

public Dashboard()
{
    SetProducts();
    SetSales();
}

当我评估这些销售价值时,它们都具有完全相同的价值。当我浏览调试器并对它们进行评估时,评估的销售额具有正确的值,但是评估等待直到将此对象传递给View(这是模拟MVC仪表板的一部分)的所有销售的所有数据都是相同。这让我相信Products字段是懒惰计算的,但我该如何解决这个问题呢?我的印象是,如果我使用不同的Enumerable,这可能是一个问题,但我认为List<T>不会有这个问题。

编辑:我还想提一下,即使产品领域是懒惰地计算,我也很难相信所有的计算都是在相同的时间内完成的。刻度应该在100ns左右,虽然我知道C#是一种非常有效的语言,但我很难相信它可以在不到100ns的时间内完成所有这些。

0 个答案:

没有答案