首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >.NET可以在进程之间共享大量内存中的集合吗?

.NET可以在进程之间共享大量内存中的集合吗?
EN

Stack Overflow用户
提问于 2012-03-07 12:02:43
回答 4查看 2.3K关注 0票数 3

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

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

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

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

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

Ps.s.数据是由一系列字节手工序列化的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-03-07 13:16:45

我只需将其实现为一个提供套接字服务器的服务,并让控制台exe连接到该服务并通过TCP/IP发出请求,从而获得响应。设置非常容易,因为您已经(根据问题)已经进行了序列化排序,并且具有很强的可伸缩性。然后,该服务可以在内存中保持所有东西都能愉快地运行。您甚至可以让客户机和服务器成为相同的exe --在Environment.UserInteractive开始决定是否是客户端还是服务器时,只需检查它。

注意:保持较低的带宽,避免使用喋喋不休的API;这意味着:不要让客户机进行大量的思考,然后发出200个请求;只需让它打包整个请求并将其发送到服务器。让服务器在本地担心这一切,避免大量的网络流量。

票数 4
EN

Stack Overflow用户

发布于 2012-03-07 12:06:21

是否有一种方法可以共享内存中的.NET对象(列表)而不是文件?

挑剔--不,不可能,分配的对象在一个特定的进程上。

您可以像远程处理一样使用thigns,但基本上可以在进程之间封送访问。

您可以共享非托管空间(共享内存),但这不能包含.NET对象-需要编组到其中。

票数 3
EN

Stack Overflow用户

发布于 2012-03-07 12:12:26

  • 如果您每天运行此应用程序100次,并且正在寻找一种将“数据”保存在内存中的方法,为什么不让应用程序继续运行而不是关闭它并再次重新启动它呢?
  • 您可以创建一个windows服务,该服务加载内存中的文件并对它们执行精化操作。当然,如果您停止或重新启动服务,它将需要重新加载数据。
  • 另一种解决方案是,与其保留内存对象(只能使用.Remoting或类似的方法),不如将文件导入数据库,这将加快进程的速度,并且可以在进程之间轻松地共享。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9601158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档