有没有人用内存映射文件做过服务器的?

zju3020912063 2009-06-20 10:10:54
我测试了下内存映射文件,发现无论map多少次,就算把虚拟内存耗尽,物理内存占用也不会超过文件本身的大小,那么应该是很多虚拟分页实际上指向相同的内存分页,这样对于大负荷的服务器,如果集中于少数文件读取,可以大幅降低磁盘操作.
是否有人做过用socket直接发送内存映射文件map出来的内存区域?这样能否真的提高性能.
另外,发送数据的时候我记得要把发送的数据锁定到系统什么的,内存映射文件是否在这方面会有问题,比如两个SOCKET同时发送两个数据段,但是他们实际指向同一个物理位置?
...全文
78 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
JessC 2009-07-11
  • 打赏
  • 举报
回复
发送文件使用TransmitFile的确提高性能,这也是该API出现的原因。
但具体细节还要看自己的也许需求
gaoteng1984 2009-07-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 udknight 的回复:]
你这样做的效率无论怎么样都比TransmitFile和TransmitPackets低。因为你有用户态到内核态切换。还不如使用这2个函数进行发送。
[/Quote]
TransmitFile和TransmitPackets,学习了~
udknight 2009-06-26
  • 打赏
  • 举报
回复
你这样做的效率无论怎么样都比TransmitFile和TransmitPackets低。因为你有用户态到内核态切换。还不如使用这2个函数进行发送。
oyljerry 2009-06-25
  • 打赏
  • 举报
回复
把你确实需要经常访问的数据库块,可以放到内存中来进行map映射等,然后大家都来读取它,这样操作效率比较高,性能也不错,而对于其他一些基本的通信数据等,就正常的分配内存,使用,释放内存就可以了
Wenxy1 2009-06-24
  • 打赏
  • 举报
回复
把常用的数据放到内存,肯定比较读硬盘要快得多。

这种高速的数据缓存,一般要周期性的刷新:例如写入,更新等操作。

在刷新时,肯定要加锁保护。
mmx2008 2009-06-22
  • 打赏
  • 举报
回复

mark
jyh_baoding 2009-06-22
  • 打赏
  • 举报
回复
帮顶一个
zju3020912063 2009-06-20
  • 打赏
  • 举报
回复
2楼,我可是把虚拟内存用完了,MapViewOfFile报内存不足,我用20M的文件做映射,每次都完全映射.你可以去试一试.
hackwolfoscar 2009-06-20
  • 打赏
  • 举报
回复
没做过

如果map到同一个映射区的话,那么他们的内存地址是相同的
blackcat242 2009-06-20
  • 打赏
  • 举报
回复
这个不行吧,你们内存区域的地址映射范围应该是不同的
cnzdgs 2009-06-20
  • 打赏
  • 举报
回复
文件映射是省略了访问文件的一些中间过程并且不使用系统磁盘缓冲,只有当程序需要大量频繁读写文件是才会提高性能,(这里的大量是指访问次数,而不是读写的数据量),实际应用中真正需要使用文件映射的时候很少。
锁定内存是底层驱动要执行的操作,应用程序不需要考虑。
bdzwj 2009-06-20
  • 打赏
  • 举报
回复
1、 提高性能是肯定的
2、 如果读取的是同一数据段,那么指向的实际地址肯定是相同的,但MAP返回的偏移地址不见得相同。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧