首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于处理非常大的字符串的选项

用于处理非常大的字符串的选项
EN

Stack Overflow用户
提问于 2010-08-23 02:36:50
回答 3查看 396关注 0票数 0

我有一个C#程序,它使用产生式语法来生成树木和花朵的3D模型以及类似的有机实体(参见wikipedia entry了解更多关于L系统的信息)-当我生成一棵带有叶子的大树时,我(意料之中)会得到字符串的指数增长,如果我允许它(我也想这样做),它会增长到100倍。

约束-我必须(某种)在C#中做到这一点-C++/本机端忙于编译和渲染生成的相当巨大的几何图形。

所以StringBuilder是正确的-即使它可以处理它,我也没有足够的内存!

我不想做一个纯粹的基于文件的解决方案--等等!

我不能改变语法-我意识到我可以压缩标准的L-Systems符号,但它是上下文敏感的语法,所以一旦你让它工作,你就会对摆弄它变得非常迷信。

我考虑过的事情

内存映射文件-我不介意使用P/Invoke进入本地层来支持一些东西,我只是不想用C++重写整个生产系统-但是我还没有找到太多方便的C#库来访问这个功能

低级处理内存管理/页面错误等问题--但是,如果我这样做了,我还不如把它作为一个产品来销售--这使得基于文件的缓慢纯解决方案看起来不是一个坏主意

有谁有什么想法吗?如何有效地遍历/操作/扩展由产生式语法生成的multigig字符串?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-24 20:39:16

您说得很对,压缩的典型方法涉及到预先存在的明文的概念。我在这里谈论的是类似于使用trie data structure而不是字典的想法。它不仅仅是被动压缩,而是使用一种内在的更紧凑的表示来隐式地编码冗余。如果你今天达到了100G,你就可以突破负担得起的硬盘的极限,所以你可能会从重新考虑解决方案中受益。

票数 1
EN

Stack Overflow用户

发布于 2010-08-23 02:42:23

如果你可以升级到Invoke 4.0,那么你就可以使用内存映射文件,而不需要P/ .net。

http://msdn.microsoft.com/en-us/library/dd997372.aspx

票数 4
EN

Stack Overflow用户

发布于 2010-08-23 03:26:40

如果这只适用于你的开发机器,那么“回到未来”的解决方案可能是,也就是内存驱动器。

RAM盘或

驱动器是一块随机存储器(主存储器或易失性存储器),计算机软件将其视为磁盘驱动器(辅助存储器)。

例如,一个。搜索RAM磁盘或RAM驱动器,您将获得丰富的选择。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3542783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档