Wcf 多层环境中的LINQ基准测试

Wcf 多层环境中的LINQ基准测试,wcf,linq-to-sql,benchmarking,Wcf,Linq To Sql,Benchmarking,我参与了一个分层应用程序的开发,该应用程序使用从web服务器分离出来的LINQ2SQL,并在WCF上绑定了NET.TCP 我的问题是: 我应该采取什么样的措施 达到最佳性能 由于 LINQ需要转换为 要序列化的IEnumerable列表 每一次,都有需要删除的内容吗 这种依赖 1) 专注于正确规范化的数据库设计。我想说的是,当您被迫在代码和数据库设计中进行设计权衡时,如果性能是您的目标,那么在对象设计中进行权衡,而不是在数据库设计中进行权衡。请理解,您将无法进行正确的超类型/子类型数据库设计,而

我参与了一个分层应用程序的开发,该应用程序使用从web服务器分离出来的LINQ2SQL,并在WCF上绑定了NET.TCP

我的问题是:

  • 我应该采取什么样的措施 达到最佳性能
  • 由于 LINQ需要转换为 要序列化的IEnumerable列表 每一次,都有需要删除的内容吗 这种依赖
  • 1) 专注于正确规范化的数据库设计。我想说的是,当您被迫在代码和数据库设计中进行设计权衡时,如果性能是您的目标,那么在对象设计中进行权衡,而不是在数据库设计中进行权衡。请理解,您将无法进行正确的超类型/子类型数据库设计,而这将与Linq to SQL一起工作(我被告知您需要使用EF)


    2) 这取决于你的意思。如果你问如何通过网络序列化匿名类,简单的答案是:“你不能,所以不要尝试”。如果您想将对象列表跨线放置,只需在IEnumerable集合上使用ToArray()扩展方法,即可通过线传送业务对象数组。

    除非编译查询,否则Linq to SQL非常慢。否则,您的应用程序将受到CPU的限制,因为大部分时间将用于将表达式树转换为SQL


    我们所说的是,如果使用编译查询,性能将提高10倍。试试看:)

    老实说,我真的不明白你在问什么-也许你应该重新设计你的问题?我在一个小测试中将ToArray与ToList进行了比较,发现ToArray慢了很多。所以现在我用的是ToList,但既然你提到了这一点,我就开始怀疑了。我会再检查一下。我没有使用任何匿名类型,所有内容都是LINQ实体或IEnumerable的形式。