Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 处理非常大字符串的选项_C#_Graphics_3d - Fatal编程技术网

C# 处理非常大字符串的选项

C# 处理非常大字符串的选项,c#,graphics,3d,C#,Graphics,3d,我有一个C#程序,它使用生产语法生成树木、花卉和类似有机实体的3D模型(有关L系统的更多信息,请参阅)——当我生成一棵长有叶子的大树时,我(预期)会得到指数级的增长,如果我愿意的话(我愿意的话),这将增加到100个Gig 约束-我必须在C#中这样做(某种程度上)-C++/本机端正忙于编译和渲染生成的相当庞大的几何体 所以StringBuilder是正确的——即使它可以处理它,我也没有足够的内存 我不想做一个纯粹的基于文件的解决方案-waaaaaayyyyyyyyyyyyyyyyyyyyyyyyy

我有一个C#程序,它使用生产语法生成树木、花卉和类似有机实体的3D模型(有关L系统的更多信息,请参阅)——当我生成一棵长有叶子的大树时,我(预期)会得到指数级的增长,如果我愿意的话(我愿意的话),这将增加到100个Gig

约束-我必须在C#中这样做(某种程度上)-C++/本机端正忙于编译和渲染生成的相当庞大的几何体

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

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

我不能改变语法-我意识到我可以压缩标准的L-Systems符号,但它是一种上下文敏感的语法,所以一旦你让它工作起来,你就会对它产生迷信

我考虑过的事情

内存映射文件-我不介意使用P/Unjk来支持本地层,我不想在C++中重写整个生产系统,但是我没有找到很多方便的C库访问这个函数

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


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

如果可以升级到.net 4.0,则可以使用内存映射文件,而无需p/Invoke


如果您可以升级到.net 4.0,那么您就可以使用内存映射文件,而无需p/Invoke


如果这仅适用于您的开发机器,那么“回到未来”解决方案可能是一个,也称为RAM驱动器

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


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

如果这仅适用于您的开发机器,那么“回到未来”解决方案可能是一个,也称为RAM驱动器

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


举个例子。搜索RAM磁盘或RAM驱动器,您将获得大量的选择。

您完全正确,压缩的典型方法涉及到预先存在的明文的概念。我在这里所说的是使用字典而不是字典的想法。它不仅仅是被动压缩,而是使用一种固有的更紧凑的表示,隐式地对冗余进行编码。如果您现在的硬盘容量达到了100G,那么您将在一个数量级内突破负担得起的硬盘驱动器的极限,因此您可能会从重新思考解决方案中获益。

您完全正确,典型的压缩方法涉及到预先存在的明文的概念。我在这里所说的是使用字典而不是字典的想法。它不仅仅是被动压缩,而是使用一种固有的更紧凑的表示,隐式地对冗余进行编码。如果您现在的硬盘容量达到了100G,那么您将在一个数量级内突破负担得起的硬盘驱动器的极限,因此您可能会从重新思考解决方案中获益。

您可以详细介绍一下您所做的字符串操作。只是附加写?随机读/写?一次随机读/写一个数据块?根据数据的大小,您显然需要在磁盘上存储一些东西,但您想在RAM中保留一个工作集吗?如何识别工作集?我假设一个数据库不适合这种操作。它是一个生产系统-整个字符串被处理,被识别的子字符串被替换为它们的新产品一个数据库将“有问题”它实际上是一个巨大的图灵机器-我需要在RAM中保留头下的内容,但如果不这样做的话,它可能会在磁盘上或磁盘下运行,很明显,让我排除一种可能性:压缩。这些自参考结构本质上是可压缩的。也许,您可以使用一种表示法,而不是使用替换来显式地用扩展段替换段,该表示法允许您简单地引用扩展段,从而允许根据需要重用该引用。这似乎是唯一的替代方案,而不是让一个应用程序只需绘制一片叶子就可以使用TB。提到压缩是一个好主意-直接使用压缩替代的问题是,在生产系统的每一次运行中,以前被替换的项目再次被替换-加上一个神经网络正在生成长度和角度之类的系数-我一直在考虑压缩,而不是解压缩压缩的“活动”部分(我目前正在替换的)但是大多数关于压缩的引用在开始processMark之前都将输入视为固定的。您完全正确,压缩的典型方法涉及到预先存在的明文的概念。我在这里谈论的是使用trie数据结构()而不是字典的想法。它不仅仅是被动压缩,而是使用一种固有的更紧凑的表示,隐式地对冗余进行编码。如果您现在的硬盘容量达到了100G,那么您将在一个数量级内突破负担得起的硬盘驱动器的极限,因此您可能会从重新思考解决方案中获益。HTHY您可以详细介绍一下您执行的字符串操作类型。只是附加写?随机的