c# - .NET 是否可以在进程之间共享大型内存中的集合?

标签 c# .net-4.0 ipc shared-memory

我有一个控制台应用程序,它每天运行数百次并从大文件(比如 50 个文件,总大小为 3-4 Gb)读取相同的数据。

我正在考虑制作一个 Windows 服务,它将数据缓存在内存中以加快访问速度并控制数据的生命周期(因为这 50 个文件的集合可能每天都不同)。

我将实现共享内存映射文件,以便控制台应用程序将从服务写入的内存中读取文件...

然而,还有另一个考虑因素。读取的数据每次都转换为 .NET 对象。

所以我的问题 - 有没有办法共享内存中的 .NET 对象(列表)而不是文件?

附言数据是一系列手动序列化的字节

最佳答案

我只是将其实现为提供套接字服务器的服务,并让控制台 exe 连接到该服务并通过 TCP/IP 发出请求,获取响应。非常容易设置,因为您已经(根据问题)对序列化进行了排序,并且非常可扩展。然后该服务可以让一切在内存中愉快地运行。您甚至可以让客户端和服务器是同一个 exe - 只需在 Environment.UserInteractive 开始决定是客户端还是服务器时检查。

一个注意事项:保持低带宽,避免使用繁琐的 API;意思是:不要让客户想太多然后提出 200 个请求;只需让它打包整个请求并将其发送到服务器即可。让服务器在本地处理这一切,避免大量网络流量。

关于c# - .NET 是否可以在进程之间共享大型内存中的集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9601158/

相关文章:

c# - 使用 ASP.net 和 C# 上传 excel 文件

visual-studio-2010 - 常规失败构建 Bootstrap

c - 在 C 和 C# 应用程序之间进行 IPC 的最快方法是什么?

c - fifo 的缓冲版本是什么?

c - popen 在进程之间传递二进制数据

c# - 如何覆盖数据网格列标题的自动创建?

c# - GZipStream 或 DeflateStream 类?

c# - LINQ distinct 与基于 List 属性的相应计数

c# - INotifyPropertyChanged PropertyChangedEventHandler 事件始终为 null

asp.net - 大型预编译 Asp.net 网站项目中出现错误 CS0433