关于.Net处理巨型树形数据结构的讨论
Nineteen 提出
: 一个巨型的树型结构,程序中,如果没有它,大概只有几兆内存的消耗,如果有它,就是几十兆上百兆,有没有体面一点的方法,在性能损失不是太大的情况下,可以减小内存消耗?
尝试了虚拟内存,得做大量的Import工作不说,用的时候还得进行巨量的非托管c++数据结构和托管数据结构之间的转换,看起来性能似乎太龌龊了.
也希望可以使用内存映射文件,问题一样,还是需要进行巨量的结构转换,当然,其他问题更多 :(
...................
发信人: VMLinux (逃离黑洞), 信区: DotNET
标 题: Re: 各位安达,帮帮忙啊
发信站: BBS 水木清华站 (Sun Jun 13 10:00:17 2004), 站内
可以分块吗?
把一部分树做为临时文件保存
需要时载入(序列化和反序列化)
发信人: DeXi (+U), 信区: DotNET
标 题: Re: 各位安达,帮帮忙啊
发信站: BBS 水木清华站 (Sun Jun 13 13:26:31 2004), 站内
如果是因为采用你设计的数状结构才导致内存消耗飙升的话,我怀疑是不是你的数据结构冗余太大了?不知道你是如何存放树的,如果用指针链的方法,一个节点多出8个byte,如果保留父节点引用,那就是12个byte,节点数目多的话,内存消耗也很可观了。
如果是数据量本来就大,可以参考DBMS中索引的实现方法,部分子数驻留在外存上,
需要的时候再装载进来。
发信人: DeXi (+U), 信区: DotNET
标 题: Re: 各位安达,帮帮忙啊
发信站: BBS 水木清华站 (Sun Jun 13 13:37:02 2004), 站内
是指文章最后提到的那个严重缺陷吗?
我也赞成前面同学提到的方法,只装载当前所在的层次列表,否则一来
难以反映更新,二来数据量太大,效率太低。说到底就是lazy evaluation.
使用XML只是改变了描述结构,但一样没有解决根本问题,处理巨大的
XML文档同样是非常困难的。
发信人: Nineteen (-_-#!), 信区: DotNET
标 题: Re: 各位安达,帮帮忙啊
发信站: BBS 水木清华站 (Sun Jun 13 14:36:09 2004), 站内
那些损耗和结点中表示的数据相比,实在不足道.
用xml消耗的空间,比那棵树占用的内存要少n多.
: 一个巨型的树型结构,程序中,如果没有它,大概只有几兆内存的消耗,如果有它,就是几十兆上百兆,有没有体面一点的方法,在性能损失不是太大的情况下,可以减小内存消耗?
尝试了虚拟内存,得做大量的Import工作不说,用的时候还得进行巨量的非托管c++数据结构和托管数据结构之间的转换,看起来性能似乎太龌龊了.
也希望可以使用内存映射文件,问题一样,还是需要进行巨量的结构转换,当然,其他问题更多 :(
...................
发信人: VMLinux (逃离黑洞), 信区: DotNET
标 题: Re: 各位安达,帮帮忙啊
发信站: BBS 水木清华站 (Sun Jun 13 10:00:17 2004), 站内
可以分块吗?
把一部分树做为临时文件保存
需要时载入(序列化和反序列化)
发信人: DeXi (+U), 信区: DotNET
标 题: Re: 各位安达,帮帮忙啊
发信站: BBS 水木清华站 (Sun Jun 13 13:26:31 2004), 站内
如果是因为采用你设计的数状结构才导致内存消耗飙升的话,我怀疑是不是你的数据结构冗余太大了?不知道你是如何存放树的,如果用指针链的方法,一个节点多出8个byte,如果保留父节点引用,那就是12个byte,节点数目多的话,内存消耗也很可观了。
如果是数据量本来就大,可以参考DBMS中索引的实现方法,部分子数驻留在外存上,
需要的时候再装载进来。
发信人: DeXi (+U), 信区: DotNET
标 题: Re: 各位安达,帮帮忙啊
发信站: BBS 水木清华站 (Sun Jun 13 13:37:02 2004), 站内
是指文章最后提到的那个严重缺陷吗?
我也赞成前面同学提到的方法,只装载当前所在的层次列表,否则一来
难以反映更新,二来数据量太大,效率太低。说到底就是lazy evaluation.
使用XML只是改变了描述结构,但一样没有解决根本问题,处理巨大的
XML文档同样是非常困难的。
发信人: Nineteen (-_-#!), 信区: DotNET
标 题: Re: 各位安达,帮帮忙啊
发信站: BBS 水木清华站 (Sun Jun 13 14:36:09 2004), 站内
那些损耗和结点中表示的数据相比,实在不足道.
用xml消耗的空间,比那棵树占用的内存要少n多.
浙公网安备 33010602011771号