.net中关于服务器开发的疑问
经过很长时间的修改我的服务器版本从1.0修改到3.6,从一个客户端一个线程到现在的异步方式处理网络,不过在服务器软件开发方面的经验依然不足,希望园子里面的服务器方面的专家些能给些建议:
先介绍一下:该服务器的客户端分为PC客户端和车载终端,以下称作客户端和终端。服务器的Session部分需要分别保存客户端和终端状态。以下是我设计的服务器的网络部分:
程序运行后通过运行HandleCar和HandleUser的StartListen函数启动线程来分别接收来自终端和客户端的数据,终端收到一包数据后处理数据:
由于终端没隔10秒发送一包数据,因此数据量很大,在AnylizeGpsData(state,bufData)中,要通过数据库里面该终端所属线路查找该线路的所有用户(通过Session里面的Socket),然后将数据转发到客户端,并将数据保存到数据库。现在的处理是来一包数据就要去找在线用户,估计这里有问题。
现在程序运行起了,出现了一下问题:
1. 现在终端的连接数已经有220个(PC客户端很少,可以忽略),当服务器运行1-2天内存就达1个多G,而且运行中观察发现时间越长占用内存越大。
2. 程序里面通过基类的事件通知UI,及时得到上线离线等一些消息,在程序运行几分钟后UI就死掉(线程安全已经考虑)。
3. 数据库是用的SQL Server 2005,当时间越长SQL Server占内存越大,1-2天后内存也达到了1个多G,和前面一样时间越长占内存越大。
如前面所说,是否是下面原因引起:
1. 收到一包数据写入数据库一条数据不可避免,但是在转发数据的时候,每次都查询了数据库,加重了数据库的负担?
2. 当一个终端连接上来后创建对象时使用的反射,会不会加重内存负担?
3. 现在的服务器要求是能使终端数量达到2000个,在设计方面应该怎么改进?
4. 占用内存是怎么产生的?如何清理内存?
QQ: 279295329
MSN: zhusimu@msn.com
![](http://www.cnblogs.com/Emoticons/qface/055243929.gif)