2012-01-05 192 views
0

我有下面的代码创建的对象:提高性能

foreach(string s in stringlist){ 
    AUser myuser = new AUser(s, "Employee"); 
    if(myuser.empid != null){ 
    userlist.Add(myuser); 
    } 
} 

上述每个步骤是相当快的,但用户创造10秒开始服用几秒钟。有一个更好的方法吗?

- 编辑 - 基于所有的答案

,很显然我应该着眼于构造器。谢谢,因为这是我正在寻找的。是的 - 在构造器中有很多可以优化的内容......这会花费时间。不知道如何接受评论建议或答案,但这是非常有帮助的。

+0

你是否介绍了它? – 2012-01-05 19:49:36

+0

所有我在VS2010中。没有其他工具用于性能测试。 – 4thSpace 2012-01-05 19:51:15

+4

我假设'新的AUser()'正在为一些属性值为's'的员工进行数据库查找?有关此代码底层内容(尤其是AUser构造函数的内容)的更多信息将提高答案的质量。 – 2012-01-05 19:51:15

回答

2

当您调试时,使用F10跳过代码,创建需要几秒钟运行的对象的东西几乎不会被察觉。例如,假设它创建了20个对象,需要2秒钟才能运行。这意味着每个对象需要1/10秒才能创建。按F10时,人类很难注意到1/10秒。您还必须考虑附加调试器的开销。

尝试在创建对象之前初始化日期变量,并将其设置为DateTime.Now。然后在创建诸如DateTime.Now.Subtract(someDate).TotalMilliseconds之类的对象之后打印出经过的时间以查看问题所在。而且,正如@MikeNakis所说,如果userList变量在正常的IList<>之上有任何额外的代码,那么您应该进行配置。

还有其他方法可以进行配置,即使内置到框架中,但DateTime方法是查找问题的快捷方式。

编辑:在我看到-1后提出问题,因为这是一个很好的示例,用于了解如何找到性能问题。

+0

+1表示单步执行时性能瓶颈的不可感知性。 – 2012-01-05 21:06:48

+0

是的,好点。我还会推荐[System.Diagnostics中的'Stopwatch'](http://msdn.microsoft.com/zh-cn/library/system。diagnostics.stopwatch.aspx)作为'DateTime'的替代方案。 – 2012-01-05 21:17:38