我正在使用LINQ to SQL来访问我的数据库,但我只是在阅读,我从不插入,更新或删除任何内容。有没有办法优化LINQ2SQL呢?
答案 0 :(得分:5)
是的。 Linq 2 SQL默认会缓存您从数据库中读取的所有数据。它需要执行此操作来跟踪您应用于对象的任何更改,因此当您调用SubmitChanges()时,它可以生成必要的插入/更新/删除语句
如果您只是在阅读数据,那么这是无关紧要的。您可以通过在DataContext上将ObjectTrackingEnabled属性设置为false来关闭对象跟踪。
答案 1 :(得分:0)
我被告知的一件事是避免使用生成的记录类。
也就是说,如果你有一个Users
表,L2S将为你创建一个User
类,它是从数据库返回的类。您应该创建一个“影子”类 - 所有相同的属性,而不是其他内容,而是立即将数据复制到这些记录中供您使用,而不是直接使用它。事实上,如果它只是只读的,你可以在ctor中分配它们,并且只有公共的getter:
class myUser
{
public string FName {get; private set}
public string LName {get; private set}
public myUser(User user)
{
this.FName = user.FName;
this.LName = user.LName;
}
}
var users = from u in db.Users
where .....
select new myUsers(u);
这避免了处理再次写出对象的可能性所需的大量开销。