我的树的初始化的办法是,先得到NoteiD最大值,然后根据这个值生成一个数姐,用以下代码进行数据库的读取并插入到树中:
while(!m_pRecordset->adoEOF)///读取 {
vNoteID = m_pRecordset->GetCollect("NoteID");
vNoteText = m_pRecordset->GetCollect("NoteText");
vParentID = m_pRecordset->GetCollect("ParentID");
vNoteType = m_pRecordset->GetCollect("NoteType");
//父级项句柄是 hSubItem[vParentID.lVal]
hItem= hSubItem[vParentID.lVal];
item=vNoteID.lVal;
hSubItem[item]=m_wndTreeCtrl.InsertItem((LPCTSTR)(_bstr_t)vNoteText,vNoteType.lVal,vNoteType.lVal,hItem);//插入树叉
问题是,hSubItem[ ]这个数组是根据ACCCESS数据库中数据记录最大ID值生成的,如果这个ID值变得非常大,生成的数组也会非常大,这样影响内存的使用和效率!还有,这个“树”在使用中要经常删除和写入记录,这样的话,这个ID值会越来越大,这个ID值是自动编号的。他每次插入的值都会比前一个ID值大。而就算前面的一些记录被删掉很多,这个ID值也不会变小。
这样用的时间越长,内存使用的效率就会越差。哪位大哥能帮我解决一下!谢谢了!
9 个解决方案
#1
几万条吗,肯定没有注册表大。
假如是一万,10千*100字节=1M,对内存来说,小意思啦。
对于long型的ID,不必关心它的大小,
至于删除插入,对于固定大小空间的操作,堆会处理好的,
如果你确实需要整理,可以定期的做:
首先计算存储树的所有空间大小,一次动态申请,将树的结点逐一转移,并释放原来的所有结点。
假如是一万,10千*100字节=1M,对内存来说,小意思啦。
对于long型的ID,不必关心它的大小,
至于删除插入,对于固定大小空间的操作,堆会处理好的,
如果你确实需要整理,可以定期的做:
首先计算存储树的所有空间大小,一次动态申请,将树的结点逐一转移,并释放原来的所有结点。
#2
老大!是这样的!
比如:我现在往数据库中存了一万条数据,这时的的数据ID最大值为1,000,在我删除五千条后,再写入五千条,这时的数据还是一万条,但是数据ID最大值就会变成15,000。像这样的操作如果多了的话,不知道这个ID值会变得多大。
初始化树叉的数组是根据这个ID值生成的,如果这个值变成了几百万或更多时,真不知道该怎么办!
比如:我现在往数据库中存了一万条数据,这时的的数据ID最大值为1,000,在我删除五千条后,再写入五千条,这时的数据还是一万条,但是数据ID最大值就会变成15,000。像这样的操作如果多了的话,不知道这个ID值会变得多大。
初始化树叉的数组是根据这个ID值生成的,如果这个值变成了几百万或更多时,真不知道该怎么办!
#3
How to Minimize Memory Allocations for New TreeView Control
(130697) - You can use the new TreeView Common Control to display a hierarchical list of items. This new control is available for Win32-based applications running under Windows NT or Windows 95. Applications typically use this control to display a list of items...
http://support.microsoft.com/default.aspx?scid=kb;en-us;130697
(130697) - You can use the new TreeView Common Control to display a hierarchical list of items. This new control is available for Win32-based applications running under Windows NT or Windows 95. Applications typically use this control to display a list of items...
http://support.microsoft.com/default.aspx?scid=kb;en-us;130697
#4
蒋晟.Net 不错,
#5
如果仅仅是要保存树形结构的数据,我个人建议不如用文件。各种操作都好办。
序列化树的方法可以用“序列化树”作为关键字搜索。
序列化树的方法可以用“序列化树”作为关键字搜索。
#6
没有必要一次就把所有的数据都读取出来,在展开一个节点的时候再读取
#7
我也不想一次读出所有结点
但是我要搜索树叉,所以不得不一次性读出.
各位老大还有没有其它办法没有啊!谢谢!!!!!!!
但是我要搜索树叉,所以不得不一次性读出.
各位老大还有没有其它办法没有啊!谢谢!!!!!!!
#8
up
#9
没办法了???
5555555555~~~
5555555555~~~
#1
几万条吗,肯定没有注册表大。
假如是一万,10千*100字节=1M,对内存来说,小意思啦。
对于long型的ID,不必关心它的大小,
至于删除插入,对于固定大小空间的操作,堆会处理好的,
如果你确实需要整理,可以定期的做:
首先计算存储树的所有空间大小,一次动态申请,将树的结点逐一转移,并释放原来的所有结点。
假如是一万,10千*100字节=1M,对内存来说,小意思啦。
对于long型的ID,不必关心它的大小,
至于删除插入,对于固定大小空间的操作,堆会处理好的,
如果你确实需要整理,可以定期的做:
首先计算存储树的所有空间大小,一次动态申请,将树的结点逐一转移,并释放原来的所有结点。
#2
老大!是这样的!
比如:我现在往数据库中存了一万条数据,这时的的数据ID最大值为1,000,在我删除五千条后,再写入五千条,这时的数据还是一万条,但是数据ID最大值就会变成15,000。像这样的操作如果多了的话,不知道这个ID值会变得多大。
初始化树叉的数组是根据这个ID值生成的,如果这个值变成了几百万或更多时,真不知道该怎么办!
比如:我现在往数据库中存了一万条数据,这时的的数据ID最大值为1,000,在我删除五千条后,再写入五千条,这时的数据还是一万条,但是数据ID最大值就会变成15,000。像这样的操作如果多了的话,不知道这个ID值会变得多大。
初始化树叉的数组是根据这个ID值生成的,如果这个值变成了几百万或更多时,真不知道该怎么办!
#3
How to Minimize Memory Allocations for New TreeView Control
(130697) - You can use the new TreeView Common Control to display a hierarchical list of items. This new control is available for Win32-based applications running under Windows NT or Windows 95. Applications typically use this control to display a list of items...
http://support.microsoft.com/default.aspx?scid=kb;en-us;130697
(130697) - You can use the new TreeView Common Control to display a hierarchical list of items. This new control is available for Win32-based applications running under Windows NT or Windows 95. Applications typically use this control to display a list of items...
http://support.microsoft.com/default.aspx?scid=kb;en-us;130697
#4
蒋晟.Net 不错,
#5
如果仅仅是要保存树形结构的数据,我个人建议不如用文件。各种操作都好办。
序列化树的方法可以用“序列化树”作为关键字搜索。
序列化树的方法可以用“序列化树”作为关键字搜索。
#6
没有必要一次就把所有的数据都读取出来,在展开一个节点的时候再读取
#7
我也不想一次读出所有结点
但是我要搜索树叉,所以不得不一次性读出.
各位老大还有没有其它办法没有啊!谢谢!!!!!!!
但是我要搜索树叉,所以不得不一次性读出.
各位老大还有没有其它办法没有啊!谢谢!!!!!!!
#8
up
#9
没办法了???
5555555555~~~
5555555555~~~