我参与了一个分层应用程序的开发,该应用程序使用与 Web 服务器分离的 LINQ2SQL,并在 WCF 上使用 NET.TCP 绑定。
我的问题是:
- 我应该采取什么样的措施来达到最佳性能?
- 由于 LINQ 返回的实体对象每次都需要转换为 IEnumerable 列表以进行序列化,是否有办法消除这种依赖关系?
我参与了一个分层应用程序的开发,该应用程序使用与 Web 服务器分离的 LINQ2SQL,并在 WCF 上使用 NET.TCP 绑定。
我的问题是:
1) 专注于适当规范化的数据库设计。我想说,当您被迫在代码与数据库设计中进行设计权衡时,如果性能是您的目标,请在对象设计而不是数据库设计中进行权衡。了解您将无法进行适当的超类型/子类型数据库设计,该设计将与 Linq to SQL 一起使用(我被告知您需要改用 EF)。
2)取决于你在这里的意思。如果你问如何通过网络序列化匿名类,简单的答案是:“你不能,所以不要尝试”。如果您想通过网络放置对象列表,只需使用 IEnumerable 集合上的 ToArray() 扩展方法通过网络传送业务对象数组。
除非您编译查询,否则 Linq to SQL 非常慢。否则,您的应用程序将受 CPU 限制,因为大部分时间将花费在将表达式树转换为 SQL 上。
如果您使用编译查询,我们谈论的是 10 倍的性能提升。尝试一下 :)