Welcome

首页 / 软件开发 / .NET编程技术 / .net中关于服务器开发的疑问

.net中关于服务器开发的疑问2011-07-24 博客园 Simens经过很长时间的修改我的服务器版本从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. 占用内存是怎么产生的?如何清理内存?