【发布时间】:2020-11-25 00:52:30
【问题描述】:
我有一个这样的 3 维列表:List<List<List<Vector128<byte>>>> dimensionLIST = new List<List<List<Vector128<byte>>>>();
现在,当我用用于计算的数据填充此列表时,它将占用 20 GB 的 RAM 内存。
我所做的计算需要 10 个小时。所以我创建了一个解决方案,我打开了 10 个应用程序实例,我将工作分成 10 个部分,这将使计算只需 1 小时(我的计算机中有 24 个内核)
现在的问题是,表单应用程序的每个实例都需要读取此 dimensionLIST,这意味着这将占用 20 GB * 10 = 200 GB RAM,这不是一个解决方案。
我的问题是,是否有可能将此 dimensionLIST 放入某种系统范围的全局列表变量中 - 所有 10 个实例都可以访问该变量?
(要说的是我不能把这个dimensionLIST 分成10 块,因为每个实例实际上都需要整个列表)
谢谢!
【问题讨论】:
-
内存映射文件,也许吧?还是其他共享内存、文件映射语义?这里有一些东西可以帮助你:docs.microsoft.com/en-us/windows/win32/memory/…
-
是的,也许。我听说过内存映射文件,但这对我来说真的很新鲜。我不确定它是如何工作的,是否可以在这样的记忆中添加
List<List<List<Vector128<byte>>>>? -
你必须重新设计你做事的方式,当然......但你将从 200GB 内存减少到 20GB 内存......这种魔法永远不会免费。
-
你不能让你的应用程序多线程吗?因此 10 个工作和平可以由一个应用程序完成,但由不同的内核同时完成。
-
@RomCoo -- 这是个好主意。更多信息在这里:stackoverflow.com/questions/2510593/…
标签: c# list global-variables system-variable