在WebForms .aspx
页面系统上,主页具有一些属性自动初始化,如
public bool MyProp => bool.Parse(Service.Settings["YorN"]);
分析页面负载,我看到PreRender
事件与其中一个属性的初始化之间存在较大的间隙。
我可以在哪里寻找延迟?两者之间的运行是什么?
不是自动属性。那是一个表达式成员。
您对MyProp
的实现计算bool.Parse(Service.Settings["YorN"]);
每当属性Getter称为时。因此,在您的情况下,每当调用 MyProp
时,该代码是运行的,并且它是每个称为的时间时间。
如果您使用的是
的自动属性public bool MyProp {get;} = bool.Parse(Service.Settings["YorN"]);
然后将在创建实例之后和在调用构造函数之前(其他字段初始化器运行时)运行。请注意,由于此代码在字段初始器中运行,因此无法使用隐式参考(this
),因此如果Service
是实例变量,则不会编译。
从技术上讲,这是一个表达式的成员,只有在您尝试"获取"属性时才会被调用。因此,每当被要求。
时称为这是:
public bool MyProp
{
get
{
return bool.Parse(Service.Settings["YorN"]);
}
}
他们不这样做,在这种情况下,属性就像是表达式时的方法 - 当您尝试从中读取它们时,对其内容进行了评估。
因此,每当某事试图读取它运行的MyProp的值时
您可能想做的就是将其作为一个只读的属性,并在类构造函数中进行设置。