我正在开发 n 层架构,而对于数据访问层,我使用的是 Entity Framework 4.1。数据库只公开存储过程。我还有一个额外的层,服务层,在 WCF 中开发。对于每个服务调用,在 using 语句中使用新的数据上下文。考虑到服务调用将达到每秒 1000 次,这种做法对吗?
最好的祝福。
我正在开发 n 层架构,而对于数据访问层,我使用的是 Entity Framework 4.1。数据库只公开存储过程。我还有一个额外的层,服务层,在 WCF 中开发。对于每个服务调用,在 using 语句中使用新的数据上下文。考虑到服务调用将达到每秒 1000 次,这种做法对吗?
最好的祝福。
每秒 1000 - 如果您的服务真的需要做某事,您将需要非常好的服务器或负载平衡的环境。
如果您的数据库仅公开存储过程并且您无法执行直接 SQL(= 您无法使用 LINQ),则没有理由使用 EF。实际上,您不应该这样做的原因有很多,因为除了性能更差之外,它不会给您任何额外的价值。此外,如果您的存储过程使用多个结果集、表值参数和其他一些高级技术,您将根本无法从 EF 4.1 使用它们。
使用直接 ADO.NET 将允许您异步执行查询,这可能导致异步 WCF 服务操作= 更好地利用您的计算能力和更好的吞吐量。
您应该更多地担心服务器负载平衡、可扩展性、WCF 性能问题,包括但不限于并发、限制。您应该选择可以根据您的需要轻松扩展且未来故障时间最短的绑定。
此外,您应该确保在后端进行了良好的多线程设计,以支持 1000 次调用/秒的基准测试(我仍然想知道它是什么)并提高服务的吞吐量。
EF 在您的情况下没有任何作用。您需要这里的原始性能。不要通过添加另一层不必要的东西来杀死。
对于负载平衡,您可以从这里开始