关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

C#开发的游戏服务器如何优化

发布时间:2020-02-14 18:39:37

###游戏服务器优化主要考虑以下几个问题:


CPU 运算;


水平扩展能力;


内存使用;


网络IO数据流量;


硬盘使用;


###性能分析


任何性能优化之前需要首先对性能进行分析,通常使用Profile 工具,对于C#来讲通常Profile 可以使用:


VS 自带有性能分析工具;也可以使用 redgate ant 或者 和resharper 结合紧密的 dottrace;


VS自带性能分析工具可以分析程序运行时候的 CPU使用复杂;


也可以分析程序内存使用较多的部分代码;


对于网络IO需要需要自己定制性能监控工具:


###内存


VS 内存分析工具,可以分析出程序运行时间中总的内存消耗,以及内存消耗热点代码;


对于我的网络游戏服务器程序,主要是生成报文的时候,以及对象状态更新的时候,有大量的内存分配;


优化方案:复用生成的报文,这样就可以只分配一次byte数值,使用内存池来管理这些报文内存;


对于protobuff的序列化,需要消耗大量内存,这里仍然是使用对象池,创建一个可以复用的stream对象,将protobuff 序列化到这个创建的protobuff对象中,我使用的是protobuf-net ,这个库参考java的pb库实现,主要注意这个类 codedoutstream 的内存使用情况。


对于游戏PlayerActor 状态更新时候的大量内存分配,是因为之前采用复制的方式来存储多帧玩家的数据,这里修改为 采用修改更新的方式,而不是复制的方式,更新玩家上一帧数据,这样就能避免内存分配了。


###网络IO


网络需要定制工具统计:


一段时间例如10s,0.5s一次间隔内的网络状态;


包括,每个间隔中发送的报文数据量,接受的报文数据量;


发送的报文数量,接受的报文数量;


平均发送的报文大小,接受的报文大小;


这里首先在服务器内部统计每个Agent的接受发送报文数据,可以将这个数据打印到log中, 再服务器内部嵌入一个 http 服务器,这样就可以实时查看一些内部状态了。


接着实现一个python 程序定期查询这个 http服务器,采样状态,接着将采样的状态 以matlibplot 绘制为线图,这样就能直观的查看程序状态了。


同时可以分析log日志,统计每种类型报文每帧的数量,平均大小;这样就能更精细化的监控状态了。


对于程序的监控可以 参考 newrelic 这个网站。


网络流量的计算:


监控平均一个玩家,服务器发送和接受的数据量,根据这个数据量,可以简单乘以玩家的数量,得到总的数据量;


例如一个玩家 2KB/s的网络数据,500玩家就是 500*2KB = 1MB/s的网络数据



相关阅读

云计算的三个优点选取小程序服务商时的注意事项不同数据库的不同区别什么是VPS主机它的优势是什么?你知道5G的优点和缺点吗?云南三级分销商城开发的目的和对企业的价值云南网站优化的3个方面和网页的优化我们晋级拉!!!云南网站链接维护的具体方法云南网站应该如何做优化云南网站维护的主要内容云南云服务器和虚拟主机的操作区别云服务器部署和注意点云南服务网器托管应该选择怎样的机房云南虚拟建设网站主机的优点和缺点云服务器和物理服务器的区别云服务器有哪些优势C# List用法 List介绍C#和Java有什么不同PHP的优点和缺点智慧新餐饮和传统餐饮的区别云数据库对比传统数据库有哪些优点裸金属服务器是什么它的作用是什么白盒测试的特点js中添加scriptjs中[]、{}、()的用法和区别php 字符串的整型转换ipa如何安装到苹果手机邓白氏码是什么?iOS开发者账号到期续费教程在C#中有哪些引用类型和值类型小程序搭建时需要准备些什么云数据库对比传统数据库的优势什么样的企业适合SEMjs中的常见错误C#数据类型转换字符串与数值之间的转换C#的几种循环遍历方式物联网是什么它和互联网又有什么区别?云南网站建设时应该注意些什么云计算是什么?它能干些什么?展望未来5G会给我们的生活带来哪些影响C#常见的几种报错类别C#的学习流程有哪些dedecms 绑定二级域名的正确方法SEM是什么它和SEO之间是什么关系?云南新餐饮料模式是如何运行的?云南网站建设初期应该注意哪些问题云南网站建设中原创文章对网站起什么作用Javascript中如何中断forEach循环云南零售小程序前景怎么样?如何优化WEB应用数据库访问慢的问题?Javascript中用let和var声明变量的区别是什么redis 的主从复制和哨兵?递归和迭代有何区别?<input> 标签的 readonly 属性怎么用?云南网站建设中网页版商城如何保证网站安全云南企业官网如何推广云南企业网站建设为什么把文章类型的栏目排在前面云南餐饮小程序能带给餐饮业什么?云南网站建设需要注意什么地方云南云服务器配置如何选择合适的云南网站建设和网站设计有何区别?云南网站建设—企业官网的好处在哪?云南做小程序的优势在哪?为什么建议做小程序?网站为什么要配置ssl证书?网站为什么要做seo,做seo有什么好处?微信小程序_企业付款到零钱 API 开发如何利用缓存提高asp.net网站访问速度中小型企业如何选择服务器配置?如何优化中小型企业网站C#.net做网站后台 需要记录日志基于asp.net企业门户网站设计霓裳民族服装seo优化分析建议Javascript的函数封装认识及使用Ajax请求中data与后端的交互有哪几种方法JavaScript如何实现组合模式???SQL之子查询的基本用法有哪些?什么是静态测试、动态测试、黑盒测试、白盒测试、α测试 β测试?C# 引入委托的目的是什么c# 委托的本质是什么C# DataGridView添加新行的2个方法C#支付宝扫码支付代码完整版c# MVC 微信支付教程系列之扫码支付代码实例Redis基础通用操作指令有哪些?String、StringBuffer和StringBuilder的各自用法常见的一些Dos命令有哪些?如何在C#中复制一个Windows窗体类前端js中的运算符的种类,=、==与===的有何区别?网站前端怎么设置页面禁止转载?解决XSS脚本攻击恶意代码的方法你知道?javascript 之 apply()、call() 探索net core实现跨域ASP.NET Core程序部署到LinuxASP.NET Core使用AutoMapper.NET Core:处理全局异常.NET Core在ASP.NET Core WebApi中使用CookieASP.NET Core:ASP.NET Core中使用NLog记录日志如何重启iis服务器SQL Server代理服务无法启动怎么办js 判断手机版与PC版自适应跳转升级版 PC版手机版界面对应跳转
/template/Home/Zkeys/PC/Static