2013-03-09 121 views
4

我一直在阅读关于以.Net Framework 4.0开始的新MemoryCache类的所有地方。从我读过的内容来看,您可以通过不同的.Net应用程序访问MemoryCache。我试图在Asp.Net应用程序和标准的Windows窗体.Net应用程序之间共享一个对象。如果我将该对象添加到.Net应用程序中的MemoryCache中,则Asp.Net应用程序不会看到它。有什么办法可以做到这一点?谢谢你的时间,这是不胜感激。ASP.NET MemoryCache在应用程序间共享

Windows窗体应用程序:

Dim cache As ObjectCache = MemoryCache.Default 
    Dim policy As New CacheItemPolicy() 
    policy.AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(60) 
    cache.Set("testcache", TestObj, policy) 

Asp.Net应用:

Dim cache As ObjectCache = MemoryCache.Default 
    If IsNothing(cache("testcache")) Then Response.Write("TestCache Is Nothing") 

谢谢 - 瑞安

回答

1

MySQL内存表工作得很好,并具有出色的性能。 20/30插入第二个CPU,仅占CPU的1%左右。

5

不,那是不可能的。 MemoryCache不是分布式缓存解决方案。所以它只能在本地使用。

如果您正在寻找分布式缓存备选方案,您可能需要查看AppFabricRedis

但是,它听起来有点像奇怪的架构,想要以这种方式共享缓存。 也许暴露一个共享服务层,asp.net和winforms都消耗,并且只有服务实现缓存似乎更合乎逻辑(考虑到我对你正试图解决的问题一无所知,所以我可以是错的)。

缓存更常用于性能方面的原因,而不是在应用程序之间共享数据的方式。

+0

谢谢帕布罗。你认为哪一个程序对新手程序员来说会更容易?你的时间值得赞赏。 – wayofthefuture 2013-03-09 20:03:09

+0

基本上,我正在用windows窗体应用程序读取udp数据。 asp.net Web应用程序使用这个udp数据。这些数据每分钟大约有100封邮件。为了避免asp.net web应用程序的用户通过odbc连接拉动数据的延迟,我希望共享内存将使asp.net应用程序响应更快,因为应用程序必须一次拉大量数据库。谢谢! – wayofthefuture 2013-03-09 20:10:07

+0

哦,我明白了。那么不,你不能像这样在不同的机器之间共享内存。最终,实际的数据需要从Winforms应用程序传输到服务器。你可以做的一件事就是在asp.net应用程序上创建一个WCF服务。 winforms应用程序每分钟调用一次该服务,使用这100个消息,并且在服务中,您可以选择将它们添加到本地缓存中,将它们存储在数据库中,或者两者兼而有之。 – 2013-03-11 14:02:18

0

我意识到这个建议并不及时,但对于其他人阅读这个问题,另一种可能性是两个程序之间的进程间通信(IPC)。这样两个程序可以直接交换消息/数据,而不需要通过中间件。

https://msdn.microsoft.com/en-us/library/windows/desktop/aa365574(v=vs.85).aspx

从上面的文档,这里有一些选择。

剪贴板 COM 数据复制 DDE 文件映射 邮筒 管道 RPC 的Windows Sockets

在你的情况,映射内存文件可能是最好的方法,因为它允许应用程序之间共享内存空间。从根本上说,你的MySql/Redis方法可能没有那么不同。

相关问题