在我的代码中哪个代码行为更好?如何更改我的代码?

时间:2014-04-06 10:06:40

标签: c# design-patterns

我读过一本书后说在循环中创建对象的效率非常低。现在我必须在我的循环中组装一个对象组合。如何更改它以提高效率?

我的模特

public class Student
{
    public int Age{ get; set; }
    public string Name{ get; set; }
    public string Sid{ get; set; }
}

我的圈子代码:通过sid获取所有学生

var sidArr="1,2,3,4".split(',');
List<Student> studentes=new List<Student>();
for(int i=sidArr.count();i>=0;i--)
{
  Student student=new Student();
  student.Sid=i;
  var findStudent=student.GetStudentBySid(i);
  if(findStudent!=null)
 {
 student.Name=findStudent.Name;
 student.Age=findStudent.Age;
 }
 studentes.Add(student);
}

我应该将此代码Student student=new Student();放在循环之外吗?如果有很多sid来创建很多学生,我应该使用设计模式吗?

2 个答案:

答案 0 :(得分:1)

你可以这样实现它(只是不要在循环中做不必要的操作:例如,当且仅当必须做时才创建新的Student实例 it)

var sidArr = "1,2,3,4".split(',');

List<Student> studentes = new List<Student>();

// 1. Count - 1: do not use Linq when you can use a simple property 
// 2. Count - 1: beware range check errors
// 3. foreach(int sid in sidArr) looks much better here
for(int i = sidArr.Count - 1; i >= 0; --i) {
  // You should seach by sid, not by index i
  int sid = sidArr[i];

  var student = student.GetStudentBySid(sid);

  if (student == null) {
    // If student is not found, we have to create a new instance 
    student = new Student();

    student.Sid = isd; // <- do not forget to set the SID
    student.Name = findStudent.Name;
    student.Age = findStudent.Age;
  } 

  // Add student: either found or created one
  studentes.Add(student);
}

答案 1 :(得分:1)

  

我读过一本书后说,在周期中创建对象的效果非常低。

你错过了上下文,或者那本书是垃圾。

  

如何更改它以提高效率?

如果不对代码进行分析,您永远不会谈论效率。尝试在不知道代码是整个图片中的性能问题的情况下提高代码效率从来都不是一个好主意。

您的代码非常简单,任何优化代码的尝试只会增加代码的复杂性,同时不会给您带来任何可衡量的性能提升。

  

我应该将此代码Student student=new Student();置于循环之外吗?

不,这将改变代码的含义。