内存映射-C#用seek一次读取1M的方式上传一个大文件为什么依然占用如此大的内存

问题描述

C#用seek一次读取1M的方式上传一个大文件为什么依然占用如此大的内存

C#用seek一次读取1M的方式上传一个大文件为什么依然占用如此大的内存,必须用内存映射吗?

解决方案

你肯定频繁的new数组了,用一个公共的空间吧

解决方案二:

为什么依然占用如此大的内存,具体是多大呢?
建议你监控一个内存的使用,是哪段代码引起的。一句句进行调试应该就可以发现,如果不能可以考虑增加一个 Sleep 语句。

按正常来说,打开文件,与 Seek 操作不需要多少内存的。只有读时,需要分配读数据的空间。具体的问题,需要分析代码。

解决方案三:

读取的byte都放在同一个数组内

时间: 2024-11-01 10:30:18

内存映射-C#用seek一次读取1M的方式上传一个大文件为什么依然占用如此大的内存的相关文章

javadbf 读取上传的dbf文件时,不能正确读取某些类型的数据

问题描述 javadbf 读取上传的dbf文件时,不能正确读取某些类型的数据 如题,读取Double.Integer.DateTime.Varchar类型的数据时出现乱码,而Character.Numeric.Date.Float能正确读取. 解决方案 byte[] b = new byte[fis1.available()]; fis1.read(b); cqPO.setDataSourceBlob(Hibernate.createBlob(b));// 只能通过字节读取 看了下b中的数据,对

excel文件-怎样通过JSP页面上传个Excel文件,并实现Java读取EXCEL存入数据库

问题描述 怎样通过JSP页面上传个Excel文件,并实现Java读取EXCEL存入数据库 用的语言是servlet+jsp+mysql和后面两个包commons-fileupload-1.3.1.jar jxl.jar 在线等,有没有会这个代码的大神 解决方案 两篇上传的,一篇jxl操作excel的.拼起来就是你要的http://www.the5fire.com/JSP%E4%B8%8A%E4%BC%A0%E6%96%87%E4%BB%B6%E7%AE%80%E5%8D%95%E5%AE%9E%

WEB读取EXCEL需要先上传吗?

问题描述 场景:用户通过页面选择一个EXCEL,然后保存,此时需要读取EXCEL的内容写到数据库.问题:1.请问需要先把这个文件进行上传操作,然后在服务器端进行读取还是可以直接读取(顺便可以提前校验数据内容)再进行上传?2.站点部署到IIS后,我上传时发现能上传D盘的东西但不能上传桌面的东西,通过给桌面文件夹添加访问权限后可以上传,但上传一个东西用户怎么知道要去改文件夹的权限?对于用户来说应该爱选什么目录都可以吧. 解决方案 解决方案二:1.需要上传,要不你在其他地方访问服务器,资源不在服务器上

读取form里上传的txt文件

问题描述 现在有一个web开发的项目,要把txt文件里用逗号分隔的数据导入到数据库,就是从网页上传回来一个TXT文件附件,读取文件里面的内容,解析之后保存到数据库.我是用ssh框架做的,从form表单里获取了文件对象,不知道怎么弄了现在.网上查了下,都是用FileReader读取本地文件的,对我这个不适用.小弟新手,求指教action里的代码大致是这样的:public ActionForward doImportDataFile(ActionMapping mapping, ActionForm

4.关于QT中的QFile文件操作,QBuffer,Label上添加QPixmap,QByteArray和QString之间的区别,QTextStream和QDataStream的区别,QT内存映射(

 新建项目13IO 13IO.pro HEADERS += \     MyWidget.h   SOURCES += \     MyWidget.cpp   QT += gui widgets network CONFIG += C++11 MyWidget.h #ifndef MYWIDGET_H #define MYWIDGET_H   #include <QWidget>   class MyWidget : public QWidget {     Q_OBJECT publi

java 深入理解内存映射文件原理_Android

内存映射文件原理 首先说说这篇文章要解决什么问题? 1.虚拟内存与内存映射文件的区别与联系. 2.内存映射文件的原理. 3.内存映射文件的效率. 4.传统IO和内存映射效率对比. 虚拟内存与内存映射文件的区别与联系 二者的联系 虚拟内存和内存映射文件都是将一部分内容加载到,另一部分放在磁盘上的一种机制,二者都是应用程序动态性的基础,由于二者的虚拟性,对于用户都是透明的. 虚拟内存其实就是硬盘的一部分,是计算机RAM与硬盘的数据交换区,因为实际的物理内存可能远小于进程的地址空间,这就需要把内存中暂

传统内核协议栈为什么不使用零拷贝,也就是内存映射来提升性能?

问题描述 传统内核协议栈为什么不使用零拷贝,也就是内存映射来提升性能? 如题,传统内核协议栈为什么不使用零拷贝,也就是内存映射来提升性能? 内核TCP/IP协议在中断处理阶段将网卡中数据拷贝到内核缓冲区,协议处理完后再将其拷贝到用户态,第一次拷贝很快,第二次拷贝很慢,大约占了整个处理流程的一半时间以上: 现在的零拷贝技术不再进行内核到用户的拷贝,而是直接进行一次内存映射,以此来提升网络性能. 那么,我想问的是:内核协议栈是否可以使用零拷贝技术?若不能,主要原因是什么? 在此,我的一个想法是:是不

c-C/C++如何读取、处理大文件

问题描述 C/C++如何读取.处理大文件 RT:我知道的就虚拟内存映射,是否多线程也可以?设内存大小2G,1.情景:>64kB 2.情景:>2GB 解决方案 内存映射没有问题多线程,是必须要考虑同步的,特别是即要读.又要写. 解决方案二: 内存映射肯定要用,可以用多线程,那样不阻塞进程 解决方案三: 内存映射肯定要用,可以用多线程,那样不阻塞进程 解决方案四: 内存映射了,线程或者进程都可以 解决方案五: 首先,内存映射是必须的,要不然这么大文件会死人,然后用多线程,主要是不要阻塞了进程,造成

Java上传数据内存溢出

问题描述 Java上传数据内存溢出 银行的系统,上传一个文件给其他系统,由于数据量太大,报内存溢出,急求. 解决方案 增加内存吧.银行有的是钱. 解决方案二: 上传文件时通常是将文件流作为字节流读取到内存中,再生成服务上的目标文件并写入的,所以可以批量读取,批量写入来取代一次性全部读取. 解决方案三: 流式读取文件,可以解决这个问题