Foxtable(狐表)用户栏目专家坐堂 → mysql连接内存释放


  共有3090人关注过本帖树形打印复制链接

主题:mysql连接内存释放

帅哥哟,离线,有人找我吗?
有点甜
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/5 11:58:00 [显示全部帖子]

试试

 

Dim conn As MySql.Data.MySqlClient.MySqlConnection
Dim cmd As MySql.Data.MySqlClient.MySqlCommand
Dim connStr As String = "server=192.168.1.1; port=3301; user id=root; password=root ; database=test;CharSet=utf8" '设置你的数据库连接字符串,注意我设置了字符编码为utf8,如果你的mysql里有中文字段,读取出来是乱码,就要记得设置mysql里你的字段的字符编码用utf8,这个世界最通用的字符编码格式!
conn = New MySql.Data.MySqlClient.MySqlConnection(connStr)
conn.Open

Using mda1 = New MySql.Data.MySqlClient.MySQLDataAdapter("SE LECT * from po" , conn) '这里可以设置你的查询语句
Dim ds1 As New System.Data.DataSet()
mda1.Fill(ds1, "TableTemp1") 'MySQLDataAdapter方法把数据放到一个新建的临时表里,这个临时表名可自定义,我这里写TableTemp
e.form.controls("Table1").Table.DataSource = ds1.Tables("TableTemp1") '把刚才的临时表TableTemp填充到我们的控件Table1里
conn.close
End Using

 


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/5 15:01:00 [显示全部帖子]

Dim conn As MySql.Data.MySqlClient.MySqlConnection
Dim cmd As MySql.Data.MySqlClient.MySqlCommand
Dim connStr As String = "server=192.168.1.1; port=3301; user id=root; password=root ; database=test;CharSet=utf8" '设置你的数据库连接字符串,注意我设置了字符编码为utf8,如果你的mysql里有中文字段,读取出来是乱码,就要记得设置mysql里你的字段的字符编码用utf8,这个世界最通用的字符编码格式!
conn = New MySql.Data.MySqlClient.MySqlConnection(connStr)
conn.Open
Dim mda1 As New MySql.Data.MySqlClient.MySQLDataAdapter("SE LECT * from po" , conn) '这里可以设置你的查询语句
Dim ds1 As New System.Data.DataSet()
mda1.Fill(ds1, "TableTemp1") 'MySQLDataAdapter方法把数据放到一个新建的临时表里,这个临时表名可自定义,我这里写TableTemp
e.form.controls("Table1").Table.DataSource = ds1.Tables("TableTemp1") '把刚才的临时表TableTemp填充到我们的控件Table1里
conn.close
vars("mda") = mda1
vars("ds") = ds1

 

-----关闭窗口之后

 

vars("mda").dispose
vars("mda") = Nothing
vars("ds").dispose
vars("ds") = Nothing
gc.Collect


 


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/5 15:32:00 [显示全部帖子]

你执行4楼第一段代码以后,关闭窗口,再在命令窗口执行第二段代码,也不能释放内存?

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/5 15:49:00 [显示全部帖子]

以下是引用z769036165在2018/9/5 15:39:00的发言:
怎么在命令窗口执行第2段代码啊?不设置全局变量显示未设置对象变量,设置了的话但是全局变量里面类型都与这个不符啊?
[此贴子已经被作者于2018/9/5 15:39:33编辑过]

 

执行第一段代码后,就可以执行第二段代码的。

 

vars变量可以自动添加的,你没有用最新版foxtable?


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/5 16:53:00 [显示全部帖子]

以下是引用z769036165在2018/9/5 16:15:00的发言:
跟我现在在窗口关闭后执行一样的结果,内存是减少了一点点,但是还是在增大

之前的错误是已经在窗口关闭后执行过一次了,再次执行报的错。
[此贴子已经被作者于2018/9/5 16:20:22编辑过]

 

那就没办法了。 .net的垃圾内存回收不会实时的。


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/5 17:20:00 [显示全部帖子]

那试试

 

vars("ds").Tables("TableTemp1").dispose

 

如果还有问题,你就要改一下思路:定义一个总的dataset,MySQLDataAdapter,所有表格都放到整个dataset里面,不需要每次都重新获取,直接冲dataset里面取出来。


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/6 9:02:00 [显示全部帖子]

1、你一行一行赋值,效率是很低的;

 

2、e.form.controls("Table2").Table.DataSource 在你关闭窗口的时候,你可以赋值为 Tables("表A"),不是也行?

 

3、主要是你要把dataset的内容dispose,然后回收,即可的。


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/6 15:46:00 [显示全部帖子]

回复18楼,根据你的需要来吧,如果你测试这样可以,那就行。

 

 


 回到顶部