我一直在研究在我的C#游戏服务器中使用Entity Framework来简化查询。我是类型安全的忠实粉丝,实体框架在自动化大多数样板代码方面做得很好。虽然我不太清楚如何利用某些组件,即ObjectContext
。
服务器使用了相当多的线程,因此线程安全是一个问题。现在我只使用自定义池来执行查询。没有详细说明,每个查询都以下列方式工作:
DbConnection
DbCommand
DbCommand
DbCommand
DbConnection
它非常干净,快速且安全,但问题是创建查询有点麻烦,如果我想要类型安全,我必须手动生成和更新“容器类”。这就是我转向实体框架的原因。
仅使用DbConnection
和DbCommand
这一切都很有效,因为不关心哪个DbConnection
/ Command对哪个对象或任何内容执行查询。
无论如何,我真的不知道如何在不施加限制的情况下解释它。每次我正常使用DbConnection
/命令执行查询,保存它以及处理ObjectContext只会增加太多开销,而我真的不需要频繁更新数据库。
您如何将实体框架用于对数据库没有高要求的游戏服务器立即持续更新?
答案 0 :(得分:2)
首先,您需要阅读本文并将其内化:
Performance Considerations for Entity Framework Applications
特别值得注意的是:
答案 1 :(得分:1)
您最有可能会注意到与Entity框架性能差异的地方在于数据更新(不是插入)。这是因为数据必须首先从数据库中读取,然后更改,然后保存回数据库。
对于对象上下文,我们使用using语句,以便直接处理它。当垃圾收集器在超出范围的所有对象上运行处理时,游戏暂停是不好的。
如果你主要阅读我会建议缓存数据,例如使用Enterprise Library Caching应用程序块。
实体框架将为您提供更高效的编程模型,而缓存将为您提供更好的性能。
答案 2 :(得分:1)
您可能想要查看Subsonic - 它更像是您的小巷,并不会尝试像EF一样聪明,并且由于简单性通常应该更高性能。同时,它很好地覆盖了对象生成角度,因此您无需编写太多样板文件。