Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带有游戏服务器的实体框架_C#_.net_Multithreading_Entity Framework - Fatal编程技术网

C# 带有游戏服务器的实体框架

C# 带有游戏服务器的实体框架,c#,.net,multithreading,entity-framework,C#,.net,Multithreading,Entity Framework,我一直在研究如何在我的C#游戏服务器中使用实体框架来简化查询。我非常喜欢类型安全,实体框架在自动化大多数样板代码方面做得非常好。虽然我不太确定如何利用一些组件,即ObjectContext 服务器使用了相当多的线程,因此线程安全是一个问题。现在我只是使用一个自定义池来执行查询。无需太多细节,每个查询的工作方式如下: 抓取一个DbConnection 抓取一个DbCommand 允许查询类设置参数 执行DbCommand 允许查询类处理查询结果(如果有) 释放DbCommand 释放DbConne

我一直在研究如何在我的C#游戏服务器中使用实体框架来简化查询。我非常喜欢类型安全,实体框架在自动化大多数样板代码方面做得非常好。虽然我不太确定如何利用一些组件,即
ObjectContext

服务器使用了相当多的线程,因此线程安全是一个问题。现在我只是使用一个自定义池来执行查询。无需太多细节,每个查询的工作方式如下:

  • 抓取一个
    DbConnection
  • 抓取一个
    DbCommand
  • 允许查询类设置参数
  • 执行
    DbCommand
  • 允许查询类处理查询结果(如果有)
  • 释放
    DbCommand
  • 释放
    DbConnection
  • 它非常干净、快速和安全,但问题是创建查询有点麻烦,如果我想要类型安全,我必须手动生成和更新“容器类”。这就是我转向实体框架的原因

    只要使用
    DbConnection
    DbCommand
    ,这一切都非常有效,因为不需要考虑哪个
    DbConnection
    /命令对哪个对象或任何东西执行查询

    不管怎样,我真的不知道如何在不施加限制的情况下更多地解释它。当我真的不需要如此频繁地更新数据库时,执行诸如每次使用
    DbConnection
    /命令执行查询、保存查询以及处理ObjectContext之类的操作只会增加太多的开销


    如果游戏服务器对数据库的即时更新要求不高,您将如何使用实体框架?

    首先,您需要阅读并将其内部化:

    特别值得注意的是:

  • 为仅re查询正确设置合并选项
  • 请注意,视图的预生成仅对RelatedEnd.Load之类的事情有帮助,而对临时查询没有帮助。使用CompiledQuery优化临时查询。对于复杂的查询,查询准备可能是一项巨大的开销,因此尽可能地这样做
  • 如果预先生成了视图并且正确设置了合并选项,那么实例化和处理对象上下文不会有很多开销。以对您的应用程序有意义的方式使用它;不要“过早地优化”它的生命周期

  • 首先,您需要阅读并将其内在化:

    特别值得注意的是:

  • 为仅re查询正确设置合并选项
  • 请注意,视图的预生成仅对RelatedEnd.Load之类的事情有帮助,而对临时查询没有帮助。使用CompiledQuery优化临时查询。对于复杂的查询,查询准备可能是一项巨大的开销,因此尽可能地这样做
  • 如果预先生成了视图并且正确设置了合并选项,那么实例化和处理对象上下文不会有很多开销。以对您的应用程序有意义的方式使用它;不要“过早地优化”它的生命周期

  • 您很可能会注意到EntityFramework在性能上的不同之处在于数据的更新(而不是插入)。这是因为数据必须首先从数据库中读取,然后更改,然后保存回数据库

    对于对象上下文,我们使用using语句,这样就可以直接处理它。当垃圾收集器对所有超出范围的对象运行dispose时,游戏暂停是不好的

    如果您主要阅读了本文,我建议您缓存数据,例如使用企业库缓存应用程序块


    Entity Framework将为您提供更高效的编程模型,而缓存将为您提供更好的性能。

    您最可能注意到Entity Framework在性能上的差异在于数据的更新(而不是插入)。这是因为数据必须首先从数据库中读取,然后更改,然后保存回数据库

    对于对象上下文,我们使用using语句,这样就可以直接处理它。当垃圾收集器对所有超出范围的对象运行dispose时,游戏暂停是不好的

    如果您主要阅读了本文,我建议您缓存数据,例如使用企业库缓存应用程序块


    实体框架将为您提供更高效的编程模型,而缓存将为您提供更好的性能。

    您可能希望查看亚音速——它更适合您,不想尝试像EF那样智能,而且由于简单,通常应该更高性能。同时,它很好地涵盖了对象生成的角度,因此您不会有太多的样板文件要编写。

    您可能想要查看亚音速——它更符合您的需要,并且没有尝试像EF那样智能,而且由于简单,通常应该性能更高一些。同时,它很好地涵盖了对象生成的角度,因此您不会有太多的样板要写。

    您的问题是什么?如果数据库很少更新,那么DataContext不应该造成巨大的开销。您是否处理了dbcommands和dbconnections?很抱歉造成混淆。数据库经常更新,但很少读取数据。至于DbCommand/Connection,不,我从来没有处理过它们,但那只是因为可以很容易地重新设计它,使用池而不是处理。我不介意频繁地创建/处理ObjectContext(假设成本很低,我也这么认为),但这似乎会挫败许多缓存机会。你的问题到底是什么?如果你的