以下哪种方法可以更好地阅读和使用SqlDataReader返回记录?
1 - 直接使用数据:
<table>
<%while(Reader.Read()){%>
<tr>
<td><%Reader.GetInt32(0)%></td>
<td><%Reader.GetString(1)%></td>
<td><%Reader.GetBoolean(2)%></td>
</tr>
<%}%>
</table>
尽快将2条记录记录到结构和关闭连接列表中,然后使用读取数据:
<%struct Data{
public int id;
public string name;
public bool active;
}
List<Data> Datas = new List<Data>();
while(Reader.Read()){
Datas.Add(new Data(){
id = Reader.GetInt32(0),
name = Reader.GetString(1),
active = Reader.GetBoolean(2)
}
}
connection.Close();%>
<table>
<%for(int i=0;i<Datas.Length;i++){%>
<tr>
<td><%Datas[i].id%></td>
<td><%=Datas[i].name%></td>
<td<%=Datas[i].active%></td>
</tr>
<% } %>
</table>
答案 0 :(得分:1)
您的问题(和评论)表明您正在尝试优化效果,但这可能是您提供的两个样本中最不显眼的方面。
我怀疑这两种方法都会显示出明显的性能提升,特别是自SqlDataReader is buffering your results anyways以来。也就是说,您可能会遇到两种情况,这种情况并非如此:
您应该考虑的是哪种方法具有更好的设计特性,同时仍然提供可接受的性能。在这种情况下,方法#2背后的思维过程肯定具有优势。从演示文稿问题中分离数据访问问题(检索Data
列表)(显示Data
)makes your code more maintainable列表。
如果您需要,您仍然可以通过让您的数据访问层返回流IEnumerable<Data>
而不是List<Data>
来实现方法#1的流式传输特性。