【发布时间】:2012-08-27 23:31:51
【问题描述】:
我有这些课程
class Match
{
int MatchID,
int TeamID, //used to reference Team
... other fields
}
注意:比赛实际上有 2 个团队,这意味着 2 个 TeamID
class Team
{
int TeamID,
string TeamName
}
在我看来,我需要显示 List<Match> 来显示 TeamName。所以我添加了另一个字段
class Match
{
int MatchID,
int TeamID, //used to reference Team
... other fields
string TeamName;
}
我现在可以做
Match m = getMatch(id);
m.TeamName = getTeamName(m.TeamId); //get name from database
但对于List<Match>,getTeamName(TeamId) 将进入数据库以获取每个 TeamID 的 TeamName。
对于每页 10 个匹配项的页面,这可能是 (10x2Teams)=20 访问数据库。
为了避免这种情况,我想到了一次加载所有内容,将其存储在内存中,然后只在内存中查找 TeamName。这让我重新思考如果记录是 5000 或更多会怎样。
有没有更好的方法呢?谢谢。
【问题讨论】:
-
您可以做的一件事是在您的数据库调用中实现分页,因此您只检索正在显示的当前页面所需的数字。然后,当单击“下一页”时,将是另一个数据库调用以检索下一页的数据,依此类推。对数据库的每次调用都将包含一个页码,以便数据库知道要检索哪个页面。
-
您是否考虑过使用 MS Entity Framework 或 NHibernate 为您管理持久性?它会让事情变得更容易,让你拥有更清晰的数据模型,并让你自动获取相关数据。
-
我同意 Pablo - ORM LightSpeed 在急切/延迟加载方面做了一些很棒的事情。因为机器有不同的规格,我不认为你会得到灵丹妙药的解决方案。与 PLINQ 类似,您必须尝试不同的方法来优化性能。
标签: c# asp.net sql-server performance