社区
C#
帖子详情
求助!c#如何进行内存映射操作大文本?
jiajie8362
2007-11-14 05:43:05
c#如何进行内存映射操作大文本?像UltraEdit那样?
...全文
750
25
打赏
收藏
求助!c#如何进行内存映射操作大文本?
c#如何进行内存映射操作大文本?像UltraEdit那样?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
25 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
bifei1983
2008-01-30
打赏
举报
回复
顶
jiajie8362
2007-11-16
打赏
举报
回复
这是一个Log分析器,必须将行号和内容记录下来,有一些互动,需要跳转到相应的行号。
csrwgs
2007-11-16
打赏
举报
回复
Mark 学习
jiajie8362
2007-11-16
打赏
举报
回复
这是一个Log分析器,必须将行号和内容记录下来,有一些互动,需要跳转到相应的行号。
jiajie8362
2007-11-16
打赏
举报
回复
要做的这部分功能是类似于UltraEdit的功能,就是将文本显示出来,软件用的是一个RichTextBox,但是如果RichTextBox中存放的文本超过几M的话,软件的相应速度就会比较慢。我现在的做法是先将整个文本存放在一个List<string>中,动态把List<string>中的文本放到RichTextBox中。
但是如果文本文本达到几百兆,将整个文件全部放到List<string>中,会占用大量的内存,所以我想找个更好的解决办法。
jiajie8362
2007-11-16
打赏
举报
回复
要做的这部分功能是类似于UltraEdit的功能,就是将文本显示出来,软件用的是一个RichTextBox,但是如果RichTextBox中存放的文本超过几M的话,软件的相应速度就会比较慢。我现在的做法是先将整个文本存放在一个List<string>中,动态把List<string>中的文本放到RichTextBox中。
但是如果文本文本达到几百兆,将整个文件全部放到List<string>中,会占用大量的内存,所以我想找个更好的解决办法。
jiajie8362
2007-11-16
打赏
举报
回复
要做的这部分功能是类似于UltraEdit的功能,就是将文本显示出来,软件用的是一个RichTextBox,但是如果RichTextBox中存放的文本超过几M的话,软件的相应速度就会比较慢。我现在的做法是先将整个文本存放在一个List<string>中,动态把List<string>中的文本放到RichTextBox中。
但是如果文本文本达到几百兆,将整个文件全部放到List<string>中,会占用大量的内存,所以我想找个更好的解决办法。
王集鹄
2007-11-16
打赏
举报
回复
读第几行只能通过计算有多少个0x13字符来判断,先定位再处理
如果是插入或删除就很麻烦,要移动整个内容
楼主要实现什么样的功能?
jiajie8362
2007-11-16
打赏
举报
回复
自己顶,看还有没有更好的意见
jiajie8362
2007-11-16
打赏
举报
回复
自己顶,看有没有更好的意见。
jiajie8362
2007-11-16
打赏
举报
回复
沉得好快
boblaw
2007-11-15
打赏
举报
回复
MapViewOfFile超过1G就容易出错
----------------------
分多次使用MapViewOfFile,每次創建文件的部分視圖
下面是API原型
LPVOID MapViewOfFile(
HANDLE hFileMappingObject,
DWORD dwDesiredAccess,
DWORD dwFileOffsetHigh,
DWORD dwFileOffsetLow,
SIZE_T dwNumberOfBytesToMap
);
dwNumberOfBytesToMap:表示要創建視圖的大小
dwFileOffsetHight和dwFileOffsetLow:表示開始創建視圖位置起點,一個是高32位,一個是低32位,具體請查詢MSDN.
如果你勉強能看懂delphi的話,也可以參考我之前delphi版寫的一個示例(可以處理16EB文件大小):
http://topic.csdn.net/u/20071017/11/0c4d1b35-f449-471a-931b-6fd3738bb49f.html
jiajie8362
2007-11-15
打赏
举报
回复
To boblaw 黑马王子
使用 MapViewOfFile 超过1G就容易出错,那为了保证程序的稳定性,应该如何做呢?
boblaw
2007-11-15
打赏
举报
回复
用什么写代码也解决不了影射30G的大文本
----------------------------
30G不算啥,64位能表示多少,內存映射就有多少.
c#如何进行内存映射操作大文本?
----------------------------
1.使用CreateFile打開文件,獲取文件句柄
2.再使用CreateFileMapping來進行映射,指定要映射的大小.
3.多次使用MapViewOfFile來創建映射視圖,並獲得一個內存指針(該指針可以和內存一樣進行操作),每次創建視圖的大小不可超過1G,通常應該更小.視圖處理完成後,可以使用FlushMapView來提交更改(不是必須),應該使用UnmapViewOfFile來取消視圖.
4.使用CloseHandle來關閉由CreateFileMapping打開的映射句柄.
另外,4樓 伴水 清洁工 看帖要回贴 仁兄的例子衹是一個簡單的應用,可以供參考,理論上可以處理4G以內的文件,但實際上大多情況下,處理1G的文件都很可能出錯.因為使用MapViewOfFile時是創建整個文件的視圖.
IThurricane
2007-11-15
打赏
举报
回复
进来学习一下
jiajie8362
2007-11-15
打赏
举报
回复
To zswang
谢谢你的代码,我正在研究。有些疑问,如果使用内存映射读取文本,只能一个字节一个字节读取吗,如果我想直接取第10行到第20行,能否做到?谢谢。
csharpstudy
2007-11-15
打赏
举报
回复
这个帖子不错.... 我正需要内存映射大文本的解决方案..
学习先, 谢谢
jiajie8362
2007-11-15
打赏
举报
回复
我的目的就是要实现一个类似文本编辑器的功能,如果把文本全加载到内存中,由于文本太大,很耗资源,所以我想是否应该用内存映射,动态加载文本。请大家给点意见。
jiajie8362
2007-11-15
打赏
举报
回复
To zhiang75
不需要30G,只需要1G就可以了。如何使用文件流,能给个例子吗?
To zjh222
是在以前工具上进行二次开发,所以只能用c#.
zhiang75
2007-11-15
打赏
举报
回复
用什么写代码也解决不了影射30G的大文本
----------------------------
表达问题,应该是
用什么语言写代码也解决不了影射30G的大文本
----------------------------
加载更多回复(5)
C#
微软培训资料
第一部分
C#
语言概述.4 第一章 第一章第一章 第一章 .NET 编 编 编程语言 程语言编程语言 程语言
C#
.4 1.1 Microsoft.NET——一场新的革命.4 1.2 .NET 与
C#
.6 1.3
C#
语言的特点.8 1.4 小 结 .11...
POI与Spire.Doc
操作
Word中
文本
与样式替换和转HTML(Java)
使用POI
操作
Word因为字体,大小等原因,可能导致无法匹配到需要的
文本
,使用Spire.Doc是可以替换
文本
的,而且还比较方便,若POI直接使用getText(),获取所有
文本
匹配,就算匹配到了,也不知道怎么去定位需要替换的...
用
C#
+XMI技术进行UML模型捕获
XSLT是一个用于改变XML文件的好选择,但是对于更广阔的不仅仅是转变数据的应用软件来说,
C#
或者另外的象Java这样的高级语言提供了更大的灵活性。 在本文中,我将展示如何通过使用XMI和
C#
来剖析一个UM...
C#
中对象与Json互转的方法整理笔记
如果
C#
自带类库中的类和方法无法方便的实现Json对象的互转,就只能
求助
于第三方类库了。JsonNet或说是NewtonSoft很快便吸引了我的注意。在测试的时候还出现了个小插曲,我使用从官方地址下载的压缩包中BIN目录下的...
C#
ASP.NET CORE发送请求接收Python Django接口的Json数据并返回
"message": "
操作
成功!", "data": [ { "article_id": 1, "title": "Django Admin模块", "brief_content": "对于某一类网站, 管理界面 是基础设施中非常重要的一部分。 这是以网页和有限的可信任管理者为基础...
C#
110,566
社区成员
642,567
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章