我们都知道的MMO游戏的流行趋势。球员彼此面对面生活。但是在游戏过程中存在SQL插入和查询的巨大流量,低于提高游戏性能C#
- 给出每页显示12分钟或500个播放器/小时
- 有平均/最低100场比赛在网上游戏进度表中,我们存储每个玩家移动
- 12 4播放机的轮比赛可以有48条记录
- 加上咒语或特殊项目
- 总共96个每锦标赛或48000每小时记录插入件围绕相同数量的(500名玩家/小时)
在效应初探我刚才的问题(Improve MMO game performance),我改变了架构和我们没有直接写入到数据库中。
而是积累在DataTable
所有值。然后,该过程每当DataTable
具有100K以上的行(其有时甚至可以在一小时内)写入到CSV格式的文本文件。另一个经常扫描CSV文件的后台应用程序读取任何可用的CSV文件并将信息存储到服务器数据库中。
问题
我们可以访问数据表存在于游戏应用的从另一个应用程序,直接(它读取数据表并清除已经阅读记录)。为了代替从磁盘写入和读取,我们直接从内存读取和写入。
是否有更快的是数据表,可容纳大量的数据,但在整理和更新操作相当快的任何方法。因为我们必须频繁地扫描用户名,更新游戏状态(几乎每个插入)。它可以是一个高速缓存工具或快速 扫描/搜索算法甚至CollectionModel。现在,我们使用foreach循环遍历
DataTable
中的所有记录,并在用户存在时更新行。如果没有,那么我们创建一个新的行。我尝试使用SortedList
和班级,但随后它不仅加倍努力,内存使用率增加极大地减慢整体的游戏性能。
感谢
阿文德
一)http://stackoverflow.com/a/981824/284240 –
是否使用了strogly类型化的DataSet或常规'的DataSet/DataTable'?你有没有设置['PrimaryKey'](http://msdn.microsoft.com/en-us/library/system.data.datatable.primarykey.aspx)?然后,您可以非常有效地通过键找到行(http://msdn.microsoft.com/en-us/library/y06xa2h1(v = vs.80).aspx)。 –
这是一个传统的模型。是的,我们有一个主键 – arvind