我有一个C#程序,它使用生产语法生成树木和花朵以及类似有机实体的3D模型(有关L-Systems的更多信息,请参阅wikipedia entry) - 当我生成一个大树叶子,我(预期)会在弦乐器中呈指数增长,如果我愿意的话,它将达到100的演出。(我希望)。
约束 - 我必须在C#中执行此操作(C ++) - C ++ / native方面正在忙于编译和渲染生成的相当大的几何体。
所以StringBuilder是正确的 - 即使它可以处理它,我也没有足够的内存!
我不想做一个纯文件解决方案 - waaaaaayyyyyyyy toooooooooooo sloooooooooooowwww!
我无法改变语法 - 我意识到我可以压缩标准的L-Systems符号,但它是一个上下文敏感的语法,所以一旦你使用它,你就会变得非常迷信于摆弄它。
我考虑过的事情
内存映射文件 - 我不介意使用P / Invoke来获取本机层以支持事物,我只是不想用C ++重写整个生产系统 - 但是我没有在用于C#的方便库以访问此功能
关于内存管理/页面错误等的低级别问题 - 但是嘿,如果我这样做,我不如将其作为产品出售 - 使得基于缓慢纯文件的解决方案看起来不是一个坏主意
有人在这里有任何想法吗?如何有效地遍历/操作/扩展由生产语法生成的多字符串?
答案 0 :(得分:4)
如果您可以升级到.net 4.0,那么您可以使用内存映射文件而无需P / Invoke。
答案 1 :(得分:1)
对于压缩的典型方法涉及预先存在的明文的概念,你是对的。我在这里谈论的是类似于使用trie data structure而不是字典的想法。它不仅仅是关于被动压缩,而是使用固有的更紧凑的表示,隐式地编码冗余。如果你现在处于100G大关,那么你的价格已超过了价格合理的硬盘限制,所以你可能会从重新思考解决方案中受益。
答案 2 :(得分:0)