最近在用CSLA做数据管理的功能。有个功能需要查看一个表b1,但一些字段的信息要从表b2中获取,这就需要每次获取b1的一行值就需要
遍历b2的所有集合。刚开始的时候是这样写的:
/// <summary>
/// 获取测点名称和类别
/// </summary>
/// <param name="name">测点名称</param>
private void SetNameAndType(string name)
{
//设置设备名和型号
if (name != null)
{
MeasurePntList meaLst=MeasurePntList.Get();
foreach (MeasurePnt temp in meaLst)
{
if (temp.Name == name)
{
_measureType = temp.MeasureType;
_PnId = temp.PnId;
}
}
}
这就导致每次都需要调用MeasurePntList.Get()方法来取值。效率很低,最后我改成如下:
在MeasurePntList 中定义一个静态实例,相当于只取一次,只有有变化的时候才会重新获取:
private static MeasurePntList _instance = null;
/// <summary>
/// 静态变量
/// </summary>
public static MeasurePntList Instance
{
get
{
if (_instance == null)
_instance = Get();
return _instance;
}
}
之后把上面代码直接改为:
/// <summary>
/// 获取测点名称和类别
/// </summary>
/// <param name="name">测点名称</param>
private void SetNameAndType(string name)
{
//设置设备名和型号
if (name != null)
{
//调用静态变量,以免重复获取大量数据,影像数
据访问速度
foreach (MeasurePnt temp in
MeasurePntList.Instance)
{
if (temp.Name == name)
{
_measureType = temp.MeasureType;
_PnId = temp.PnId;
}
}
}
}
这样就大大提高了效率……