场景:把另一个数据库里的数据迁移过来,两个数据库,都是SQLite的,数据的话大概是学校--年级--班级--学生--成绩类似这样的关联数据。
实现:控制台程序A,操作原数据,然后调用WCF本地接口插入新的数据库,控制台程序A内存正常,循环插入新数据后,WCF接口的进程内存越来越大,大概以2M/S的速度增长,GC回收也没用。
内存分析工具只能分析控制台A的,分析WCF本地接口不了,没人调用肯定不会增长内存,
目前只处理了,操作完一个把WCF进程关闭,再打开,但这样很容易出问题,请教各位大佬,我该怎么办?操作WCF接口代码如下,都关闭了,还是一直增长。
就那么几行代码都排除不了?
多半是操作数据库没有Dispose
检查过了,都有释放,贴的代码是Proxy层,操作数据库的如下
要不这样:现在的问题是找不到哪里占内存了,可以先注释掉一部分代码,看看效果,如果还是老样子,就注释掉另一部分代码,直到找到哪里占了内存。
代码量比较少的话这样应该可以找到
数据类似这样几个学校--学校下面几个年级--十几个班级--一个班级100个学生--N多次考试的成绩,注释的话不太好查问题
项目F5 跑2分钟看一下内存对象就好了
这些看不懂啊
@小代码大世界:
1.循环插入数据量有多大?
2.使用代码主动释放,不要被动
3.没用的连接数要断开。
1,数据类似这样几个学校--学校下面几个年级--十几个班级--一个班级100个学生--N多次考试的成绩,还不能批量插入,有很多关联关系,数据量的话可以大可以小,但大小都是2M/S的内存在增长,除非执行完了。
2,代码都检查过了,都释放了
3,连接也释放了
阿哈,你的问题我也遇到过。问题的根本在于,你的HttpRequest 请求这里。你底层可能 用的是HttpClient对象 ,你插入数据 的时候,大量调用httpclient ,导致 有大量的socket 堆积,所以就 内存 飙升了…… 记得把分数都给我
这部分迁移数据没有用到httpclient ,都是本地数据库,本地插入
只能操作前看这个WCF接口占用内存多少,多的话就把这个WCF服务重启了
不要循环调用代理去访问数据库,逻辑性代码最后移植到后台去完成,最后统一保存到数据库