CNDEV
CNDEV.ORG
当前在线
论坛
CBD
程序员情感CBD
程序员见面交流会
CBD开发区
Java/J2ME
.NET/C#
数据库
Delphi/BCB
Visual C
其它
修真养身
中国象棋
纪念日
谈钱太俗,还是投机吧
听音乐
iCosta
资源共享
一隅
好文共赏
看电影看美剧
待定
狗屎
雪域召唤
工作流
专业显摆区
语录
情感
批评与自我批评
爱情故事
发牢骚
看三点区
游戏
CNDEV-CS/WOW
浩宇长空
生活
家有XPH
我爱学英语
美食天地ORG
半调子体育迷
观澳园友邻
搞笑奇文
拍照片
我读书我存在
论坛系统
超级垃圾站
系统建议及BUG
系统测试
中国开发网
: 论坛:
程序员情感CBD
: 贴子 639537
sealw
: 是一个一个char地读违反了cache的原意
[阅读: 558] 2008-06-06 01:46:11
<空>
相关信息:
27M的文本文件,分离其中的HTML tag和文本,耗时17秒。这个速度正常吗?
(119字)
(
aho
[799]
2008-06-05 17:26
)
不正常。
(25字)
(
ycm0263
[575]
2008-06-05 17:28
)
超频呀,给你屁眼后面加电压
(空) (
beijingshizi
[558]
2008-06-05 17:30
)
╭∩╮(︶︿︶)╭∩╮
(空) (
ycm0263
[479]
2008-06-05 18:01
)
相当的不正常
(26字)
(
好望角
[568]
2008-06-05 17:31
)
String := String + Char,这非常慢的。FileStream 次之。
(空) (
没脾气2x
[539]
2008-06-05 17:44
)
如果.NET的话,我推荐使用 StringBuilder 和设定了合适 Buffer 宽度的 FileStream
(空) (
没脾气2x
[559]
2008-06-05 17:47
)
那Delphi里有何解决办法?Java里用StringBuffer
(空) (
sealw
[765]
2008-06-05 18:55
)
delphi也可以先Len:=Len*3 div 2;setlength(string,Len);...
(15字)
(
haitao
[941]
2008-06-05 21:30
)
Delphi 里用某种 Stream 吧,我久以不用delphi。
(空) (
没脾气2x
[590]
2008-06-05 23:48
)
刚查了一下,有 TStringStream
(空) (
没脾气2x
[711]
2008-06-05 23:50
)
它好像也是要先全部读入内存的。。。。。。。
(108字)
(
haitao
[627]
2008-06-06 09:30
)
。
(空) (
haitao
[536]
2008-06-06 09:31
)
都低.
(空) (
holly
[473]
2008-06-05 19:19
)
你注释掉String = String + char那句话,就知道有多低了
(空) (
sealw
[503]
2008-06-05 19:22
)
偶说个特笨的办法。。。
(16字)
(
mhappy
[598]
2008-06-05 21:02
)
terrible
(空) (
周星驰
[472]
2008-06-05 21:40
)
string := string +Char每次都要为 string 分配内存,当然低了。先一次分配足够内存,然后直接把char move 进去可能会快点?
(空) (
pcplayer
[581]
2008-06-05 21:47
)
测试了一下,和FileStream.Read(Char,1)相比,string+char可谓飞速了
(空) (
aho
[686]
2008-06-05 23:38
)
对.
(空) (
holly
[519]
2008-06-05 23:57
)
string+char可能已经内部实现:每次满了,会先Len:=Len*3 div 2;setlength(string,Len);... (15字) (haitao [4] 昨天……
(109字)
(
haitao
[790]
2008-06-06 00:08
)
FileStream 至少读了一下磁盘,中间还要通过api,把 1 改成簇大小能成倍的长啊。
(空) (
没脾气2x
[572]
2008-06-06 00:16
)
没看懂
(空) (
holly
[462]
2008-06-06 00:22
)
主要还是调用的时间吧,访问磁盘即使filestream不做缓冲,OS的文件系统也会缓冲的。不过逐个字节可以少写很多行程序嘛,哈哈
(空) (
aho
[592]
2008-06-06 00:45
)
那次我也是这样想的
(87字)
(
haitao
[658]
2008-06-06 08:50
)
估计是慢在字符转码,和Java的getBytes()类似的问题,和文件缓冲其实无关
(空) (
sealw
[1031]
2008-06-06 08:56
)
按二进制字节读,与转码有什么关系?
(空) (
haitao
[551]
2008-06-06 09:06
)
不摸Delphi很久了,瞎猜的。那你试下来慢在哪里?确实是因为底层都没有缓冲?
(空) (
sealw
[700]
2008-06-06 09:10
)
改为一下子全部读入内存再处理,就很快。。。。。。。。
(42字)
(
haitao
[665]
2008-06-06 09:14
)
那你还是没搞明白*为什么*一个一个char读会慢
(空) (
sealw
[528]
2008-06-06 09:16
)
内部的具体实现可以隐藏;但是大致过程必须说明 (141字) (haitao [2] 今天 09:12 )
(186字)
(
haitao
[659]
2008-06-06 09:18
)
如果没有搞清楚*为什么*,以后就会不断遇到同一个问题,就像很多Java程序员会遇到中文问题一样
(空) (
sealw
[550]
2008-06-06 09:30
)
那个实现已经调用api了。。。。。。。。
(17字)
(
haitao
[569]
2008-06-06 09:34
)
函数调用
(7字)
(
holly
[548]
2008-06-06 09:35
)
海大师第一定律: 走 80% 的路, 让 20% 的人去搞懂为什么吧
(空) (
holly
[568]
2008-06-06 09:35
)
我用delphi是很懒得管底层;而用c,却很喜欢做底层的实现。。。。。。
(48字)
(
haitao
[613]
2008-06-06 09:40
)
这个算第二定律吧。
(空) (
ycm0263
[513]
2008-06-07 00:07
)
原因很简单的
(111字)
(
holly
[538]
2008-06-06 09:34
)
这样就清楚了,不明白操作系统原理不行啊
(空) (
sealw
[522]
2008-06-06 09:36
)
这个其实是得明白源程序变成机器码是啥样的
(空) (
holly
[585]
2008-06-06 09:37
)
其实关键要想到反复从用户态到内核态调用的开销
(空) (
sealw
[533]
2008-06-06 09:40
)
如果是这样的开销,是会比较大
(57字)
(
haitao
[605]
2008-06-06 09:44
)
看来你是得补一补操作系统原理了
(空) (
holly
[524]
2008-06-06 09:46
)
是一个一个char地读违反了cache的原意
(空) (
sealw
[557]
2008-06-06 09:46
)
还好. 要是没有切换开销影响不会这么大
(空) (
holly
[511]
2008-06-06 09:47
)
os的cache,函数自己的小buffer,同样是内存,速度差这么多的?
(46字)
(
haitao
[1062]
2008-06-06 09:37
)
请参见前面的计算
(空) (
holly
[534]
2008-06-06 09:38
)
函数的调用会这么慢?
(53字)
(
haitao
[524]
2008-06-06 09:42
)
是不大啊, 可是 27M 个不大加一起就大了
(空) (
holly
[531]
2008-06-06 09:47
)
这个好像php只要两行代码就搞定了,先file_get_contents -> $a, 然后strip_tags, 你去试试要多少时间
(空) (
lukejee
[694]
2008-06-06 00:26
)
如果文件长度2G,它也会先全部读入内存?
(29字)
(
haitao
[1038]
2008-06-06 08:52
)
高度抽象的东西,必然隐藏实现细节
(空) (
sealw
[561]
2008-06-06 08:59
)
内部的具体实现可以隐藏;但是大致过程必须说明
(141字)
(
haitao
[579]
2008-06-06 09:12
)
就是把整个文件读到一个字符串的函数
(64字)
(
sealw
[536]
2008-06-06 09:29
)
它好像也是要先全部读入内存的。。。。。。。 (108字) (haitao [1] 今天 09:30)
(243字)
(
haitao
[547]
2008-06-06 09:32
)
你见过2G大小的文本文件
(空) (
lukejee
[586]
2008-06-06 12:34
)
真见过一些
(11字)
(
好望角
[471]
2008-06-06 15:06
)
在XP下,写一个文件,最大究竟可以写多大?2G?4G?
(空) (
pcplayer
[464]
2008-06-06 15:08
)
谁更你整Windows
(13字)
(
好望角
[537]
2008-06-06 15:13
)
Dump文件需要分离HTML Tag和文本么
(空) (
lukejee
[426]
2008-06-06 15:23
)
嘿嘿,这些Dump的结构远复杂过HTML
(空) (
好望角
[443]
2008-06-06 15:32
)
我要加密的文件,就不一定非得是文本文件了。。。。。。。
(空) (
haitao
[424]
2008-06-06 15:26
)
娘的,人家在问, 从HTML文本里面分离html tag和普通文本的速度, 被你们越整越底下去了
(空) (
lukejee
[558]
2008-06-06 23:27
)
说那么多浪费一屏幕干嘛?把猴子叫出来,问问猴子是怎么做的不就行了?
(空) (
Fish
[523]
2008-06-06 09:54
)
那看来应该得有这样的一个类了:TByteFileStreamCached。。。。。。。。
(108字)
(
haitao
[546]
2008-06-06 09:57
)
问问猴子是怎么做的不就行了?
(空) (
Fish
[516]
2008-06-06 09:59
)
CreateFileMapping & REPNE SCASB
(空) (
好望角
[633]
2008-06-06 10:07
)
靠,还得google一下才知道
(151字)
(
Fish
[653]
2008-06-06 10:19
)
下次google的时候
(40字)
(
好望角
[504]
2008-06-06 10:25
)
汇编早就忘得差不多了
(空) (
Fish
[534]
2008-06-06 10:30
)
其实,这个话题里需要的就是折中的一个类接口。。。。。。。。
(108字)
(
haitao
[461]
2008-06-06 10:41
)
如果没有人实现过,考虑自己写一个了。。。。。。。搜到一个类似的
(3704字)
(
haitao
[626]
2008-06-06 22:37
)
猴子已经说过CreateFileMapping,如果再加上汇编处理,可能就更快了
(空) (
Fish
[576]
2008-06-06 22:50
)
娘的,人家在问, 从HTML文本里面分离html tag和普通文本的速度, 居然被你们整到要学汇编了 (空) (lukejee [0] 今天 23:27)
(空) (
lukejee
[507]
2008-06-06 23:28
)
我觉得,既然是从磁盘取得数据涉及到从内核态切换到用户态的调用开销是最大的开销,又不想一次把所有数据装入内存以避免内存占用过大,最简单的做法还是分段操作。
(152字)
(
pcplayer
[705]
2008-06-06 22:59
)
初步考虑create时还传入一个buffer大小的参数,缺省为64K。。。。。。
(53字)
(
haitao
[560]
2008-06-06 23:07
)
1G内存现在100多
(空) (
lukejee
[547]
2008-06-06 23:23
)
1G SDRAM 可以花 100 多 RMB 买到吗?
(空) (
ycm0263
[559]
2008-06-06 23:55
)
SDRAM是什么时代的机器用的?
(空) (
lukejee
[570]
2008-06-07 00:03
)
P2 P3 都可以用吖?
(3字)
(
ycm0263
[477]
2008-06-07 00:08
)
我笔记本上有两条 256
(空) (
lukejee
[475]
2008-06-07 00:18
)
送偶两条台式机用的吧。
(空) (
ycm0263
[541]
2008-06-07 09:39
)
我有两条64M的,来深圳拿吧
(空) (
leejd
[449]
2008-06-07 10:29
)
你到广州请 FB 时顺便带给偶好了。
(空) (
ycm0263
[414]
2008-06-07 11:37
)
我有两条128M的EDO,可以用在P133上的。
(空) (
zhong
[513]
2008-06-07 10:48
)
那就假设是一个 10G 的文件。
(空) (
pcplayer
[546]
2008-06-07 11:43
)
是54M次切换,回来一样慢
(空) (
好望角
[528]
2008-06-07 00:14
)
这么长一屏幕,看得我都要吐了。。。
(空) (
Miracle
[541]
2008-06-06 11:33
)
你的不是大屏幕么?
(空) (
pcplayer
[504]
2008-06-06 11:37
)
有了?
(空) (
amo
[487]
2008-06-06 11:39
)
几个月?
(空) (
pcplayer
[484]
2008-06-06 11:48
)
小M牛已经实现了 折中的一个类接口。。。。。。。。 (108字) (haitao [12] 今天 10:41 )
(8字)
(
haitao
[569]
2008-06-06 12:05
)
非也,纯粹是太长了,眼晕~~~~~~~~~~~~~
(空) (
Miracle
[432]
2008-06-10 12:37
)
`
(空) (
zhong
[548]
2008-06-07 08:55
)
从本帖可以看出本坛的3个特点
(14字)
(
zhong
[591]
2008-06-07 08:58
)
问题:如何快速高效的读一个很大的文本文件 ( 积分:0, 回复:44, 阅读:5691 )
(10740字)
(
haitao
[1408]
2008-06-07 10:17
)
扫了一眼,基本上都是菜鸟
(空) (
好望角
[439]
2008-06-08 00:32
)
你看出哪些是科班的?
(空) (
sealw
[502]
2008-06-08 09:43
)
挺好的一个技术贴
(20字)
(
wilddeer
[531]
2008-06-07 15:19
)
欢迎光临本社区,您还没有登录,不能发贴子。请在
这里登录