我是否应该重用表适配器实例

本文关键字:适配器 实例 是否 | 更新日期: 2023-09-27 18:29:11

我目前有一个类似于下面的类(省略错误检查(

目前,这就是数据库包装到更易于使用的对象中的方式。

想知道我是否要加载 50,000 个订单,如果我应该创建一次表适配器然后重用它们,而不是为每个订单创建一个新的表适配器?

我还没有看到任何真正的速度问题以这种方式进行。但是,最好不要每次都创建新的表适配器吗?

如果是这样,是否有预先存在的模式来处理这个问题?

class Order
{
    public int Id {get; private set;}
    public string CustomerEmail { get; set; }
    public SaleLocaion SalePoint { get; set; }
    public Order(int orderId)
    {
        using (var ta = new OrdersTableAdapter())
        {
            using (var res = ta.GetDataById(orderId))
            {
                if (res.Count == 1)
                {
                    var row = res.First();
                    Id = row.Id;
                    CustomerEmail = row.Email;
                    SalePoint = new SaleLocaion(row.SaleLocationId);
                }
            }
        }
    }
}

class SaleLocaion
{
    public int Id {get; private set;}
    public string Name { get; private set; }
    public SaleLocaion(int locationId)
    {
        using (var ta = new SaleLocationAdapter())
        {
            using (var res = ta.GetDataById(locationId))
            {
                if (res.Count == 1)
                {
                    var row = res.First();
                    Id = row.Id;
                    Name = row.Name;
                }
            }
        }
    }
}

我是否应该重用表适配器实例

是否重用它们并不重要。它们实现IDisposable但只是因为它们继承自实现IDisposable Component,也因为数据集的拖放功能。但是没有必要处置它们,原因与DataSetDataTable实现IDisposable但实际上不需要处置的原因相同。

构造函数或字段初始化也非常便宜,因为所有字段都是null的,并且构造函数仅包含:

public OrdersTableAdapter() { // an examplary auto-generated table-adapter constructor
    this.ClearBeforeFill = true;
}

因此,请选择最具可读性和故障安全的方法。