【问题标题】:Sharing huge byte arrays between asp.net users在 asp.net 用户之间共享巨大的字节数组
【发布时间】:2014-05-04 00:31:15
【问题描述】:

我的 ASP.Net 应用程序中有一些庞大的原始字节数据数组 (1 MB * 100)。他们需要非常频繁地向多个用户广播。

一个线程在后台处理数据并不时更新它们。

您能否就在它们之间共享缓冲区的最佳选项给我一些建议?

【问题讨论】:

    标签: c# asp.net resource-management


    【解决方案1】:

    这听起来像是内存映射文件的好例子

    内存映射文件包含虚拟内存中文件的内容。文件和内存空间之间的这种映射使包括多个进程的应用程序能够通过直接读取和写入内存来修改文件。从 .NET Framework 4 开始,您可以使用托管代码访问内存映射文件,就像本机 Windows 函数访问内存映射文件一样

    http://msdn.microsoft.com/en-us/library/dd997372(v=vs.110).aspx

    http://msdn.microsoft.com/en-us/library/vstudio/system.io.memorymappedfiles.memorymappedfile

    线程处理数据

    这是一个 ASP.Net 线程吗?我不会在 IIS (why not) 的上下文中执行那种类型的任务。相反,我建议共享内存由 IIS 之外的单独进程管理,例如 Windows 服务。

    内存映射文件机制非常适合更新数据的 Windows 服务,以及根据需要访问数据的单个 ASP.Net 工作线程。

    【讨论】:

    • 感谢您的回复。我可以使用 Windows 服务器。但是,内容通过套接字来自另一台服务器,并且在服务器中没有物理保存位置。这会改变你的答案吗?
    • 我会用一个持久文件来支持内存映射。这样,数据将比工作进程回收更有效。 +1
    • @beebee:我说的是 Windows 服务,而不是 Windows Server 操作系统。无论数据是否需要物理保存,它都不会改变我的答案。正如 usr 在他的回答中指出的那样,内存映射文件可能由持久文件支持,但并非必须如此。它只能存在于虚拟内存中。
    猜你喜欢
    • 2011-05-30
    • 1970-01-01
    • 2016-06-21
    • 2011-04-08
    • 2013-02-24
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    • 2020-02-27
    相关资源
    最近更新 更多