Foxtable(狐表)用户栏目专家坐堂 → 如何删除临时表?


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

主题:如何删除临时表?

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


加好友 发短信
等级:三尾狐 帖子:620 积分:6782 威望:0 精华:0 注册:2013/12/17 1:00:00
如何删除临时表?  发帖心情 Post By:2019/1/8 1:48:00 [只看该作者]

Dim b As New SQLGroupTableBuilder("多表统计1",valuesaa(0))
b.C
b.Groups.AddDef(values2(x),d1(values2(x))) '有多个分组列
b.Totals.AddDef(zdtj,AggregateEnum.sum,zdtjnax(zdtj) & "累加值") '对统计列进行统计
b.Decimals = 4
Dim dtb1 = b.build(True)
Dim tab2 As WinForm.Table = e.Form.Controls("Table2")
tab2.Table.DataSource  = dtb1

这个临时表如何释放?也就是在窗口中有个表控件,显示临时表的统计结果,不断进行统计,就会发现内存一直在增长,统计几次后ft就会内存超出,导致ft崩溃,
现在想在每次统计显示结果后释放临时表,如何能做到?
dtb1.dispose
dtb1 = Nothing
gc.collect
也试过,没有什么作用,因为tab2的显示还占用表,占用的这个表如何随着窗口的关闭彻底释放其所占的内存。
也用过tab2.table.datatable.datarows.clear,这样是可以释放大多数内存,但还会使ft增加几十M内存
如何用更好的办法释放tab2占用的内存,请帮助解决问题。

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/1/8 9:03:00 [只看该作者]

参考 BuildDataSource

 

http://www.foxtable.com/webhelp/scr/1909.htm

 


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


加好友 发短信
等级:三尾狐 帖子:620 积分:6782 威望:0 精华:0 注册:2013/12/17 1:00:00
  发帖心情 Post By:2019/1/8 10:26:00 [只看该作者]

现在是统计后形成了新表,对这个新表定义dtb1 = b.build(true),不是直接用tab2.Table.DataSource =b.BuildDataSource,而是
在dtb1上增加临时列,最后显示的是表dtb1,
通过
dtb1.dispose
dtb1 = Nothing
gc.collect
可以释放dtb1
但是,窗口表tab2.Table.DataSource  = dtb1
引用的dtb1就不能释放了,需要将窗口表引用的表释放,关键此时找不到tab2.Table对应的表,也不能释放这个表,经测试可以通过
tab2.Table.datatable.datarows.clear 清除行,但并不能释放这个引用表。
如果先定义tab2.Table.DataSource =b.BuildDataSource,然后可以tab2.Table.datatable上增加临时列,再进行一些计算也可以,不知行不行?
看看还有什么好的办法吗?

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


加好友 发短信
等级:三尾狐 帖子:620 积分:6782 威望:0 精华:0 注册:2013/12/17 1:00:00
  发帖心情 Post By:2019/1/8 10:59:00 [只看该作者]

总之,就是想知道如何将定义的tab2.Table.DataSource  = dtb1,dtb1释放后,
在关闭窗口的时候将tab2.table.datasource释放内存
[此贴子已经被作者于2019/1/8 10:59:07编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/1/8 11:04:00 [只看该作者]

设置 tab2.Table.DataSource 后,datatable不能释放的。

 

你可以在关闭窗口后,unload表格等操作。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/1/8 11:05:00 [只看该作者]

以下是引用kgdce在2019/1/8 10:26:00的发言:
 
如果先定义tab2.Table.DataSource =b.BuildDataSource,然后可以tab2.Table.datatable上增加临时列,再进行一些计算也可以,不知行不行?

 

直接用 tab2.Table.DataSource =b.BuildDataSource

 

 


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


加好友 发短信
等级:三尾狐 帖子:620 积分:6782 威望:0 精华:0 注册:2013/12/17 1:00:00
  发帖心情 Post By:2019/1/8 11:24:00 [只看该作者]

经测试,就是反复执行这句tab2.Table.DataSource =datatables("表A“)也会增加内存,这是什么原因?只要窗溃口绑定表,就会增加内存而不会完全释放内存,这样随着程序的使用,就是用gc.collect后,内存使用也会越来越多,最终程序会崩溃。因为反复打开窗口和关闭窗口,这是实际操作中经常用到的,这是个致命的问题如何解决?

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/1/8 11:51:00 [只看该作者]

1、设置 DataSource 是相当于把【表A】的数据拷贝了一份,内存增加是肯定的。

 

2、关闭窗口不回来立即恢复,过一段时间后(内存不够用的时候)自动恢复,或者执行gc.coolect后恢复。

 

3、具体出错的实例发上来测试。


 回到顶部