如何使程序集的后续实例共享相同的内存

本文关键字:共享 内存 实例 何使 程序集 | 更新日期: 2023-09-27 18:14:05

我想要一个类似于静态类变量的东西,除非当不同的应用程序加载我的程序集时,我希望它们都共享同一个变量。

我知道我可以写到磁盘或数据库,但这是一个与sql查询使用的进程,这可能会减慢它太多(实际上我要测试这些选项,但我问这个问题在此期间b/c我不认为这将是一个可接受的解决方案)。

我更愿意使用在部署中产生最少开销的解决方案,并且我不介意解决方案不容易创建,只要它在我完成后易于使用即可。

我知道有一些持久内存框架在那里。我还没有看过其中任何一个,也许其中一个是完美的,所以请随意推荐一个。我也完全满足于自己写一些东西,特别是如果它使我这样做更容易部署的话。

提前感谢任何和所有的建议!

编辑:看起来我忽略了一个非常简单的解决方案。我的问题涉及SQL只提供8000字节的空间来序列化对我编写的SQL聚合函数的调用之间的数据。我读了一篇关于如何压缩数据并最大限度地利用这8000字节的文章,并认为我已经无能为力了。事实证明,我可以设置MaxBytes = -1而不是0到8000之间的范围,以获得最多2gb的空间。我相信这是他们在3.5框架中添加的新东西,因为有很多文章都在讨论这个8000字节的限制。

谢谢大家的回答,虽然这是一个问题,我一直想解决其他原因在过去,现在我知道该怎么做,如果我需要一个真正简单和快速的方式来沟通应用程序之间

如何使程序集的后续实例共享相同的内存

您不能将其存储为内存数据并在进程之间共享,因为每个进程都有自己独立的内存地址空间。

然而,一个选择是使用。net内存映射文件支持来"存储"共享数据。这将允许您在每个进程都可以访问的地方编写包含信息的文件。

每个进程都有自己的地址空间。你不能像你想的那样简单地共享一个变量

你可以使用共享内存

如果你是在。net 4上,你可以简单地使用内存映射文件

如果您想要某种机器范围的计数或锁定,您可以使用命名同步对象,如信号量- http://msdn.microsoft.com/en-us/library/z6zx288a.aspx或互斥体http://msdn.microsoft.com/en-us/library/hw29w7t1.aspx。当指定name时,这些对象是机器范围的而不是进程范围的。