以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 如何删除临时表? (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=129873) |
-- 作者:kgdce -- 发布时间: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占用的内存,请帮助解决问题。 |
-- 作者:有点甜 -- 发布时间:2019/1/8 9:03:00 -- 参考 BuildDataSource
http://www.foxtable.com/webhelp/scr/1909.htm
|
-- 作者:kgdce -- 发布时间: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 -- 发布时间:2019/1/8 10:59:00 -- 总之,就是想知道如何将定义的tab2.Table.DataSource = dtb1,dtb1释放后, 在关闭窗口的时候将tab2.table.datasource释放内存
[此贴子已经被作者于2019/1/8 10:59:07编辑过]
|
-- 作者:有点甜 -- 发布时间:2019/1/8 11:04:00 -- 设置 tab2.Table.DataSource 后,datatable不能释放的。
你可以在关闭窗口后,unload表格等操作。 |
-- 作者:有点甜 -- 发布时间: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 -- 发布时间:2019/1/8 11:24:00 -- 经测试,就是反复执行这句tab2.Table.DataSource =datatables("表A“)也会增加内存,这是什么原因?只要窗溃口绑定表,就会增加内存而不会完全释放内存,这样随着程序的使用,就是用gc.collect后,内存使用也会越来越多,最终程序会崩溃。因为反复打开窗口和关闭窗口,这是实际操作中经常用到的,这是个致命的问题如何解决? |
-- 作者:有点甜 -- 发布时间:2019/1/8 11:51:00 -- 1、设置 DataSource 是相当于把【表A】的数据拷贝了一份,内存增加是肯定的。
2、关闭窗口不回来立即恢复,过一段时间后(内存不够用的时候)自动恢复,或者执行gc.coolect后恢复。
3、具体出错的实例发上来测试。 |