Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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#_Entity Framework_Strongly Typed Dataset - Fatal编程技术网

C# 在线游戏服务器的类型化数据集或实体框架?

C# 在线游戏服务器的类型化数据集或实体框架?,c#,entity-framework,strongly-typed-dataset,C#,Entity Framework,Strongly Typed Dataset,我的游戏是基于turnbased的,但它确实有一些实时元素,比如聊天,所以它需要快速。一台服务器最好能支持几千名在线玩家 我知道数据集倾向于在内存中存储大量数据,但我认为这正是避免每毫秒进行两次db调用所需要的。我倾向于远离实体框架,因为我似乎无法控制引擎盖下发生的事情,这让我觉得效率不高 现在我知道这两种方法(也不是一般意义上的c#)都不是生活中最快的解决方案,但我确实需要一点方便 顺便说一句,我不能轻易地使用.NET4.0,因为还有一些不确定的依赖关系。这些问题可以解决,但老实说,我不想花时

我的游戏是基于turnbased的,但它确实有一些实时元素,比如聊天,所以它需要快速。一台服务器最好能支持几千名在线玩家

我知道数据集倾向于在内存中存储大量数据,但我认为这正是避免每毫秒进行两次db调用所需要的。我倾向于远离实体框架,因为我似乎无法控制引擎盖下发生的事情,这让我觉得效率不高

现在我知道这两种方法(也不是一般意义上的c#)都不是生活中最快的解决方案,但我确实需要一点方便


顺便说一句,我不能轻易地使用.NET4.0,因为还有一些不确定的依赖关系。这些问题可以解决,但老实说,我不想花时间去解决。我宁愿坚持使用3.5,因为我的依赖关系可以很好地使用。

如果你唯一的问题是聊天,那么你可以选择不同的解决方案,使用提供messeging和breadcasting的外部云系统

查看此链接:


希望我在某种程度上有所帮助

如果你唯一的问题是聊天,那么你可以选择不同的解决方案,使用提供messeging和breadcasting的外部云系统

查看此链接:


希望我能有所帮助

我已经用数据库后端做了一个游戏

智者之言:在实时游戏中更新缓存是困难的。你的玩家将一直在互动。您必须考虑是否要将所有玩家保持在同一台服务器上—如果是这样,缓存很简单,但会限制增长。如果没有,请思考如何让人们在同一台服务器上进行交互。例如,聊天服务器可以解决聊天问题。然而,如果你有地理位置,你可能想按世界区域划分,如果你没有,你可能想保留玩家组,或者如果你有不同的游戏实例,你可以按此划分

另一个问题是锁定-您的玩家可能访问另一个玩家正在更新的相同数据。您几乎肯定要处理事务隔离级别-i。E读取未提交将有助于锁定。为此,ADO提供了更多的控制

然而,EF可以让您编写更干净的更新代码,如果您使用ID进行更新,则性能不会有所不同

您可以通过ADO进行混合读取,通过EF进行混合写入。您甚至可以在下面编写使用ADO的事务数据库上下文。这样,他们看起来很像,但在背景中做的事情不同


只是我的想法,我希望这能帮助您找到解决方案。

我用数据库后端做了一个游戏

智者之言:在实时游戏中更新缓存是困难的。你的玩家将一直在互动。您必须考虑是否要将所有玩家保持在同一台服务器上—如果是这样,缓存很简单,但会限制增长。如果没有,请思考如何让人们在同一台服务器上进行交互。例如,聊天服务器可以解决聊天问题。然而,如果你有地理位置,你可能想按世界区域划分,如果你没有,你可能想保留玩家组,或者如果你有不同的游戏实例,你可以按此划分

另一个问题是锁定-您的玩家可能访问另一个玩家正在更新的相同数据。您几乎肯定要处理事务隔离级别-i。E读取未提交将有助于锁定。为此,ADO提供了更多的控制

然而,EF可以让您编写更干净的更新代码,如果您使用ID进行更新,则性能不会有所不同

您可以通过ADO进行混合读取,通过EF进行混合写入。您甚至可以在下面编写使用ADO的事务数据库上下文。这样,他们看起来很像,但在背景中做的事情不同


就我的想法而言,我希望这能帮助您找到解决方案。

听起来这两种解决方案都不适合您的问题。因此,你的问题就像在问是用湿报纸还是雨伞把钉子钉在墙上。。不管答案如何,你可能都不应该这样做

EF有很多限制和怪癖,确实有一些开销。如果您真的想坚持使用3.5(我认为这是一个糟糕的选择,但是,嘿),那么我不会推荐它——除非您已经习惯了它,包括如何解决任何性能问题

数据集只是一个令人憎恶的东西。我的专业信念是,它们的发明是为了让微软能够为VisualStudio进行5分钟的拖放编码演示,从而说服所有VB程序员切换到.NET。与几乎所有东西相比,它们的速度非常慢(尽管.NET2.0的性能至少可以线性扩展)

我不确定您应该使用什么产品,但我知道内存中的关系数据库允许您存储事务日志和偶尔的快照,以便在服务器死机(或IIS重新启动等)时方便回滚,从而以可扩展性为代价提供性能(整个数据库必须放在内存中)

另一种选择是使用NoSQL数据库(如MongoDB),它可以跨多个服务器进行很好的扩展,并允许您将所有相关数据捆绑到一个文档中(因此在查询数据时,您不会有连接表的所有开销)


这两个选项中的任何一个都将比两个原始建议中的任何一个更合适。

听起来这两个解决方案都不适合你的问题。因此,你的问题就像是问是否要用湿报纸或雨伞把钉子钉在墙上。不管答案如何,你可能都应该这样做两个都不要

EF有很多限制和怪癖