我有一个控制台应用程序,每天运行一百次,并从大文件中读取相同的数据(例如,50个文件,总大小为3-4 Gb)。
我正在考虑创建一个Windows服务,它将数据缓存在内存中,以加快数据的访问速度,并控制数据的生命周期(因为这50个文件的集合可能每天都在变化)。
我将实现共享内存映射文件,这样控制台应用程序将从服务编写的内存中读取文件.
然而,还有另一个考虑。每次将读取的数据转换为.NET对象。
所以我的问题--是否有一种方法来共享内存中的.NET对象(列表)而不是文件?
Ps.s.数据是由一系列字节手工序列化的。
发布于 2012-03-07 13:16:45
我只需将其实现为一个提供套接字服务器的服务,并让控制台exe连接到该服务并通过TCP/IP发出请求,从而获得响应。设置非常容易,因为您已经(根据问题)已经进行了序列化排序,并且具有很强的可伸缩性。然后,该服务可以在内存中保持所有东西都能愉快地运行。您甚至可以让客户机和服务器成为相同的exe --在Environment.UserInteractive开始决定是否是客户端还是服务器时,只需检查它。
注意:保持较低的带宽,避免使用喋喋不休的API;这意味着:不要让客户机进行大量的思考,然后发出200个请求;只需让它打包整个请求并将其发送到服务器。让服务器在本地担心这一切,避免大量的网络流量。
发布于 2012-03-07 12:06:21
是否有一种方法可以共享内存中的.NET对象(列表)而不是文件?
挑剔--不,不可能,分配的对象在一个特定的进程上。
您可以像远程处理一样使用thigns,但基本上可以在进程之间封送访问。
您可以共享非托管空间(共享内存),但这不能包含.NET对象-需要编组到其中。
发布于 2012-03-07 12:12:26
https://stackoverflow.com/questions/9601158
复制相似问题