这两天上班遇到两个问题,还花了两天时间解决,结果只需要加两行代码就能搞定的问题,现在记录下来。
第一个,内存泄露:有个服务,供用户调用MapInfo生成地图,开始时候用的好好的,但跑两天后,就出现乱码,初步怀疑是内存泄露。开始的时候用了dispose啊,close啊什么的试了下,没有搞定,后来加了句GC.Collect() ,问题就解决了。
都知道C#会自动回收垃圾,所以内存泄露的情况一般不会出现,如果是访问量大的服务加上这么一句,能够让系统回收内存,效果很明显。
第二个,多线程同时访问GDI,有个接收程序,收到更新信息后,就去更新图片里面的内容,一次更新一个还可以,更新多个的时候就提示当前对象正在被使用,开始的时候加了Lock,好了一点,但当数据量大的时候还是会出现这个问题,后来在Lock里面加了个Thread.Sleep(100),让线程睡眠0.1秒,图片资源得到释放,就可以了。感谢一个同事提供了这个方法,不然我都不知道怎么办。
这两个问题都属于C/S开发容易出现的,以前没有遇到过,具体原因我也不是很清楚,记录下来,以后备查!