我很擅长使用C#.但是我对某个部分感到困惑,这促使我提出这个问题.
我有一个代码 -
public class UsersModel { public ListUsers { get { // Some code to connect to database and get list of users from database // return list of users } } } public class HomeController { var um = new UsersModel(); var users = um.Users; }
现在当我从ANTS Performance Profiler检查这样的代码时,我发现该属性被击中2次,我相信它会影响性能.
问题 -
我应该在构造函数中初始化属性值吗?
或者我应该为此类任务创建单独的方法?
为什么属性用户被击中2次?
编辑-
作为参考,我将添加链接属性设计,分享好的想法.
我喜欢语句Property getters应该是没有任何先决条件的简单操作.如果getter可能抛出异常,请考虑将该属性重新设计为方法.
从MSDN "在属性和方法之间选择"(强调我的):
在以下情况下,请使用方法而不是属性.
该操作比字段集慢几个数量级.如果您甚至考虑提供异步版本的操作以避免阻塞线程,则很可能该操作太昂贵而无法成为属性.特别是,访问网络或文件系统的操作(初始化除了一次)应该最有可能是方法,而不是属性.
在这种情况下,您应该选择一个方法,因为您的类的调用者希望属性快速返回.
否则,粗心的调用者可能会随意编写代码,例如:
for (int i = 0; i < um.Users.Count; i++) { Console.WriteLine("User {0}: {1}", i, um.Users[i].Name); }
导致N+1
对数据库的调用,其中N
是用户数.
通过使其成为一种方法,您正在将缓存结果的责任转移给调用者.
为什么属性用户被击中2次?
我怀疑它实际上可能是调试器或分析器检查属性值的结果.在另一个答案中提到的唯一知道方法是检查调用堆栈.