【发布时间】:2011-11-11 17:53:33
【问题描述】:
我有一个像下面这样的课程,
class Student
{
public string Name {get; set;}
public string Surname {get; set;}
public int Age {get; set;}
public string Address {get; set;}
}
我有一个包含 50,000 条记录的 MySql 表。表结构如下,
ID NAME SURNAME AGE ADDRESS
1 Joe Philip 20 Moscow
2 Misha Johny 25 London
...
我有一个 C# 代码,
List<Student> students = new List<Student>();
string sql = "SELECT name,surname,age,address FROM Students";
command.CommandText = sql;
MySqlDataReader reader = command.ExecuteReader();
while(reader.Read())
{
Student st = new Student();
st.Name = reader["Name"].ToString();
st.Surname = reader["Surname"].ToString();
st.Age = Convert.ToInt32(reader["Age"].ToString());
st.Address = reader["Address"].ToString();
students.Add(st);
}
但它的工作速度很慢。您建议使用哪种方法使这段代码运行得更快?
更新:
当我使用这段代码时,
DataTable dt = new DataTable();
adapter.Fill(dt);
效果很好,速度也很正常。但是我用自己的课程尝试有什么问题?
【问题讨论】:
-
当然很慢。不要一次将 50k 条记录全部读入内存!
-
这是最快的速度,这里没有明显的改进或疏忽——你需要内存中的所有这些记录吗?
-
出于好奇,为什么需要将整个数据库表读入内存根本?数据库的一般概念是,它们可能保留比内存容量更多的数据,我们应该逐条处理数据。
-
看我的回答;如果您告诉我们您将如何处理这些学生数据,您可能会得到更好的答案。
-
该代码无法编译。您正在将
string分配给int属性(年龄)。
标签: c# mysql list datareader