我要实现的是个网络传输文件的程序。
通过自定的协议 把socket接收的数据写成磁盘文件。
网络部分没什么问题。为了提供网络利用率,我使用内存映射文件方式,写文件,这样确实比较快。可是问题是这样:
我传输一批文件(就是一个一个的顺序传),每个都不大,20M-70M左右。
刚开始传输的时候,速度很快。过了一段时间之后(传【大约】15个文件之后),就变慢了,相同大小的文件,会占用开始时几倍的时间,越来越慢。而且操作系统变得很卡,激活个窗口都要等半天。
但是任务管理器中CPU占用率,和程序占的内存,页面,虚拟内存都很小。
请有过类似经验的朋友帮忙解释解释!
可以排除网络的问题,我只传输而不写文件的情况下不会出现这个问题。
.net 3.5
[DllImport("kernel32.dll")]
        internal static extern IntPtr CreateFileMapping(IntPtr hFile,
            IntPtr lpFileMappingAttributes,
            uint flProtect,
            uint dwMaximumSizeHigh,
            uint dwMaximumSizeLow,
            string lpName);
用这个方式创建的内存映射文件。感谢回帖的朋友

解决方案 »

  1.   

    但是任务管理器中CPU占用率,和程序占的内存,页面,虚拟内存都很小。
      

  2.   

    确实是内存的问题,虽然程序没占内存。但系统可用内存减少了。
    调用 UnmapViewOfFile 并没有收回内存。[DllImport("kernel32.dll")]
    internal static extern bool UnmapViewOfFile(IntPtr lpBaseAddress);把写完的文件删除掉,倒是可以回收内存。是UnmapViewOfFile 调用错误吗