现在我的ASP.NET应用程序中有一个名为universe的静态类。宇宙拥有行星和各种其他天体。当应用程序启动时,我希望应用程序将大部分数据库加载到内存中,因此在应用程序的生命周期内,需要对数据库进行很少的调用。
现在我在静态类中有几个名为universe的列表,我只是从每个表中选择所有数据并将它们放入各自LINQ对象的列表中。从那里我使用部分类扩展LINQ对象。但是我觉得应该有更好的方法来做这件事。如果这是一个愚蠢的问题,请提前抱歉。
public static List<ss_planets> planets = new List<ss_planets>();
public static List<ss_moons> moons = new List<ss_moons>();
public static void create_the_universe()
{
ssDataContext db = new ssDataContext();
var p = (from s in db.ss_planets select s);
foreach (ss_planets pl in p)
{
planets.Add(pl);
}
var m = (from m in db.ss_moons select m);
foreach (ss_moons mo in p)
{
moons.Add(mo);
}
}
答案 0 :(得分:2)
您可以使用LoadWith将所需的所有表格检索到内存中。
答案 1 :(得分:1)
在只读情况下的小应用程序中执行此操作没有任何问题。如果您大量查询这些列表并遇到性能问题,则应考虑创建词典。它们允许快速查找某些密钥。
您也可以考虑设置
ssDataContext.ObjectTrackingEnabled = false;
并应将上下文创建包装在using
- 语句中,该语句为您提供:
using (ssDataContext db = new ssDataContext())
{
ssDataContext.ObjectTrackingEnabled = false;
// do your thing here
}
禁用对象跟踪会阻止您使用在此方案中无法执行的实体,并且可能会减少初始加载时间。
答案 2 :(得分:0)
为什么不使用内存数据库?
网站上的静态对象通常是个坏主意,因为每个请求都可以同时访问静态对象