.net中关于服务器开发的疑问

 

经过很长时间的修改我的服务器版本从1.0修改到3.6,从一个客户端一个线程到现在的异步方式处理网络,不过在服务器软件开发方面的经验依然不足,希望园子里面的服务器方面的专家些能给些建议:

 

先介绍一下:该服务器的客户端分为PC客户端和车载终端,以下称作客户端和终端。服务器的Session部分需要分别保存客户端和终端状态。以下是我设计的服务器的网络部分:

 

程序运行后通过运行HandleCarHandleUserStartListen函数启动线程来分别接收来自终端和客户端的数据,终端收到一包数据后处理数据:

 

 

由于终端没隔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

 

posted @ 2009-04-06 17:22  Simens  阅读(2064)  评论(12编辑  收藏  举报