我建立了一个动态 record 数组
TMyRecord = record
FieldNames:array of string;
Records:array of array of Variant;
end;大致的结构如上,目的是把数据库里的东西保存进来,做一些特殊的运算。
用一个类来管理。它作为类的一个private 存在。现碰到一个问题。如果我插入10万条记录的话,就会报 out of memory 。请问怎么解决?
或者说,谁知道 CreateMemoryView 对动态record数组的应用?
TMyRecord = record
FieldNames:array of string;
Records:array of array of Variant;
end;大致的结构如上,目的是把数据库里的东西保存进来,做一些特殊的运算。
用一个类来管理。它作为类的一个private 存在。现碰到一个问题。如果我插入10万条记录的话,就会报 out of memory 。请问怎么解决?
或者说,谁知道 CreateMemoryView 对动态record数组的应用?
解决方案 »
- 送分了.快近来看呀
- dxdbgrid 中修改某一列的内容,同时计算其它一列的内容?
- 怎样在一个字符串中使用字符串变量
- 怎么打印?
- 调用TFileStream.Write(lpData, 1024), 其中lpData的类型为PChar, 为什么调用后返回值总是0?
- 怎样在delphi里把整型数转换成型为 xxxx-xx-xx的形式的日期格式。在线
- 下载了一本中文的OBJECT PASCAL 语言指南,可是打不开???
- delphi 与asm 的问题
- 高分求助
- 大家第一次跳槽对老板说的什么?
- 谁能讲讲关于DELPHI 中类的创建与调用实现过程?或是有关这方面的资料!
- 怎样获取TREEVIEW拖放后的节点
既然是从数据库中取出来的,是否可以考虑直接用clone 到 _recordset
也就是从数据库中取得内容,保存成一个文件。然后,透过该文件,查询得到相关的数据。
用数据库本身,或者dbGO控件效率上很糟糕。
所以我想到的是用二分法去search 一个动态Record,封装了一个简单的类似于TDataSet的东西。
昨天完成了读写部分,做了一个小实验,一下子插入10000条数据(5个字段)耗时10几秒,但是新增10w条的时候,out of memory。
我能想到的解决方案是 内存映射。就是尚在研究 内存映射 和 动态Record 的应用。
我晓得,我的结构对于 内存映射 是很痛苦的一件事情。
因为 string ,variant。但是,我自己这个类已经实现了 LoadFromStream LoadFromFile (利用 TWriter TReader)
所以,估计还是有机会实现的。
提升的不是很多。
不过我们可以看出,再优化的TDataSet查找方法,也比不过直接使用动态数组。
想着吧,把后面那个秒数也去掉。
所以在写2.0版本。理论上验证,是可以达到我想的结果。
就是在过大数据量10w条的时候,(当然,业务上还不会有这么大的数据。仅仅个人的思考点)。
还有:Variant如果不是必要的,尽量不要用,因为它势必导致系统开销过高。你到网上搜下Variant类型就知道了。定义二组Variant动态数组非常不明智。
这里的string给个长度限制看看 ,如string[64]
SaveToFile()方法试试速度,这个应该是在内存操作的。
不知道能不能用SQL。