加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在C#中管理大对象

发布时间:2020-12-15 23:51:49 所属栏目:百科 来源:网络整理
导读:我有大量的树状结构对象.我有一个问题,即应用程序使用的内存量开始接近 1GB,这意味着机器上的性能下降并且内存指令不足. 我设法通过使用sqlite将对象放到表中来解决这个问题,从而有效地管理数据,但这不再是一个可能的解决方案(原因我不会在这里讨论). 你有什
我有大量的树状结构对象.我有一个问题,即应用程序使用的内存量开始接近> 1GB,这意味着机器上的性能下降并且内存指令不足.

我设法通过使用sqlite将对象放到表中来解决这个问题,从而有效地管理数据,但这不再是一个可能的解决方案(原因我不会在这里讨论).

你有什么建议来管理这类事情?
我没有(真正的)数据库可供使用所以我认为解决方案是以某种方式模仿sqlite程序并使用一些文件后备存储 – 是否已经存在于纯点网中或者它是一个复杂的卷你自己的情况?

解决方法

当您开始存储大量对象时,对象分配开销成为一个真正的问题.例如,在32位系统上运行.NET时,分配任何对象至少需要16个字节.在64位系统上,每个对象最少说24个字节.如果您的单个对象很小,那么分配开销是一个巨大的代价.

你说你有一个“树状的结构”.如果没有关于您的应用程序的更多细节,我不能肯定这适用,但大多数树结构需要指向子节点和(有时)指针返回父节点.像树木一样有用,它们有时会产生很大的开销.父和子链接需要50%或更多的树使用的总内存并不罕见.

在C#中,您可以通过使用结构而不是对象来减轻分配开销,因为结构基本上没有分配开销.当然,缺点是您必须处理有时非常不方便的值类型语义.

也有可能将许多树结构折叠成数组,从而消除子链接和父链接,从而节省大量内存.这通常以更复杂的代码和运行时效率的一些损失为代价.

在我的工作中,我经常需要在内存中保留非常大的集合(数亿个节点).当内存中有2.5亿条记录时,节点中的每四个字节需要另外几千兆字节的RAM.即使在16千兆字节的机器上,维护这样的数据结构也需要非常仔细地考虑如何使用内存.

如果你必须将整个事物保存在内存中,那么我建议你尽可能地创建树节点结构.您还应该考虑存储树的其他方法 – 消除与父母或孩子的明确链接的方法.如果没有关于您的特定应用程序的更多信息,我无法提出更具体的建议.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读