• 主页
  • 招聘
  • 语言基础/算法/系统设计
  • 数据库相关
  • 图形处理/多媒体
  • 网络通信/分布式开发
  • VCL组件开发及应用
  • Windows SDK/API

一个神奇的文本框内存占用问题。

Dangyuhang 2009-12-11 02:49:43
用Dephi 2010写了个小程序,界面很简单,整个窗体上只有一个文本框,在Vista下面编译运行一切正常,内存占用大概保持在5mb左右。

拿到XP下面跑了一下,看似也挺好,几个小时后,不经意间发现这个小东西的内存占用竟然达到了14mb之巨。顿感奇怪,为什么Vista好好的,拿到XP就不行了呢?你说要使程序复杂点也就罢了,这么个小东西能在什么地方出问题呢?

于是我从很多方面进行了测试,最后锁定了问题的成因,只要在Memo里用微软拼音输入法输入中文,就能看到内存以数百kb的速度往上涨,且涨上去之后就不会下降了。

起初我以为是TMemo控件的问题,但去看了一番源代码,并没有发现特别的地方。于是打开了XP自带的记事本,发现这个问题也存在,只要持续输入中文,内存就一直上涨,但它的涨幅仅仅只是几十kb的级别,且一段时间之后还会自动释放。

我百思不得其解了,谁知道这到底是为什么?应该如何释放那些被占用的内存呢?
...全文
170 点赞 收藏 20
写回复
20 条回复
JEVJEL 2012年04月14日
你们这些家伙,都不针对问题,在这里乱扯别的,毛啊?
回复 点赞
Dangyuhang 2009年12月13日
[Quote=引用 15 楼 seamour 的回复:]
自己慢慢玩去吧,一口一个sb继续无知下去吧

[/Quote]

求求你了,别出现在我眼前了,我被你恶心怕了行不?
回复 点赞
cm2004 2009年12月13日
另外再顺便发表下我的谬论:技术再好都是个圈圈,始终还是个给别人打工的,钱到手才是最实际的
回复 点赞
cm2004 2009年12月13日
猩猩做人还是要懂得谦卑比较好,真正的高调是低调~
回复 点赞
pathletboy 2009年12月13日
[Quote=引用 15 楼 seamour 的回复:]
自己慢慢玩去吧,一口一个sb继续无知下去吧

[/Quote]
不要这么说啊,人家“无知”才来这个论坛求教的,有些时候,还是不要把自己当老师的好,共同探讨问题多好,当然你要是觉得人家和你档次差太多,配不上和你探讨,你可以无视之。
[Quote=引用 11 楼 seamour 的回复:]
在这里我藐视任何人还真都没什么问题
[/Quote]
一山还有一山高,高手可不光技术牛,人品才是第一位的。
回复 点赞
Seamour 2009年12月12日
自己慢慢玩去吧,一口一个sb继续无知下去吧
回复 点赞
Dangyuhang 2009年12月12日
[Quote=引用 12 楼 sz_haitao 的回复:]
水平有高低,语气还是不要有高低的好

输入法模块占用的内存量x,会算入在应用的内存占用量y,这可以理解——我是第一次知道
但是A应用的x会特别大、一直大而不会缩小,而B应用的x则不会大,大了也会缩小
虽然x是输入法占用的,但是,是不是A应用对输入法的哪里处理、控制做的不如B呢?

而且,对于最终用户,他们也许也像我和楼主一样,不知道y大是因为x大了
只看到lz的应用的y特别大,也可能就会认定lz写的程序有问题
所以,lz还是有责任解释、让A应用保持与B应用一样的表现
[/Quote]

这位朋友的话实在,就是这么个道理,谁都有擅长的领域,也都有不擅长的地方。碰到别人问问题,懂了,给别人解释下,不懂,大家讨论下,和和气气多好。

这个内存的问题我确实没头绪,我用C++和C#分别实现了类似的程序,同样Vista编译,XP运行,都没问题,就Delphi 2010编译出来的就有问题。我怀疑D2010有点问题。
回复 点赞
Dangyuhang 2009年12月12日
[Quote=引用 11 楼 seamour 的回复:]
在这里我藐视任何人还真都没什么问题
从win9x开始,32位win系统的输入法就已经成形了,应用程序通过消息机制 imm32.dll 和第三方 ime 进行交互。从 win9x 开始,ime 就是个稍微特殊点儿的 dll 文件,file info 中需要标注 drive、ime 标记,同时完成 ime 约定的不到20个接口。imm32.dll 通过消息机制和应用程序通讯,加载 ime,ime 本身会在应用程序的进程空间中分配内存,它怎么分配你是管不着的更没必要去管。至于“在应用程序的进程空间中分配内存”意味着什么,由于你不懂什么是进程空间,虽然说到这儿了已经作完全部的解答,但是你还是不明白这意味着什么,所以就只能一嘴一个sb来显示自己的无知了

[/Quote]

我真的很好奇,你的自信从什么地方来?如此恶劣的态度,如此轻蔑的口气,你真是那种几秒钟就让人把你灭了的存在。

回到我的问题,我的小程序太简单,就直接拖了一个TMemo到界面上,没做任何处理,为什么在Vista这边很正常,到了XP那边内存占用就如此厉害?我拿了记事本做实验,似乎人家处理的挺好,内存再输入文字的时候会升高,但之后就会下降。

你说的原理我明白,可是能解释我的问题吗?我的本意是想知道是否Delphi 2010的TMemo是否有处理欠妥的地方,进而知道是否有什么解决的方案。

Delphi非我所长,学了才三天,只是发现了这个问题,想要问问大家是否有什么线索,可是我的命很背,上来就碰到你这么个老鼠屎,真的很扫兴。

你这种人,技术高到天又如何?
回复 点赞
Dangyuhang 2009年12月12日
[Quote=引用 4 楼 seamour 的回复:]
人家 mspy 占的内存跟你的程序有毛关系?输入法都是天上掉下来的不需要占内存的?

[/Quote]

你能看懂中文吗?它输入法占的内存跟我没关系,但它导致我的程序内存占用飚升且不会下降,你说跟我有没有关系?最恨你这种不看清楚帖子就乱喷的二傻!
回复 点赞
haitao 2009年12月12日
水平有高低,语气还是不要有高低的好

输入法模块占用的内存量x,会算入在应用的内存占用量y,这可以理解——我是第一次知道
但是A应用的x会特别大、一直大而不会缩小,而B应用的x则不会大,大了也会缩小
虽然x是输入法占用的,但是,是不是A应用对输入法的哪里处理、控制做的不如B呢?

而且,对于最终用户,他们也许也像我和楼主一样,不知道y大是因为x大了
只看到lz的应用的y特别大,也可能就会认定lz写的程序有问题
所以,lz还是有责任解释、让A应用保持与B应用一样的表现
回复 点赞
Seamour 2009年12月12日
在这里我藐视任何人还真都没什么问题
从win9x开始,32位win系统的输入法就已经成形了,应用程序通过消息机制 imm32.dll 和第三方 ime 进行交互。从 win9x 开始,ime 就是个稍微特殊点儿的 dll 文件,file info 中需要标注 drive、ime 标记,同时完成 ime 约定的不到20个接口。imm32.dll 通过消息机制和应用程序通讯,加载 ime,ime 本身会在应用程序的进程空间中分配内存,它怎么分配你是管不着的更没必要去管。至于“在应用程序的进程空间中分配内存”意味着什么,由于你不懂什么是进程空间,虽然说到这儿了已经作完全部的解答,但是你还是不明白这意味着什么,所以就只能一嘴一个sb来显示自己的无知了
回复 点赞
Seamour 2009年12月12日
人家 mspy 占的内存跟你的程序有毛关系?输入法都是天上掉下来的不需要占内存的?
回复 点赞
Dangyuhang 2009年12月12日
[Quote=引用 7 楼 harryfin 的回复:]
楼主试试直接拿到XP下编译
[/Quote]

这个我倒是也想过,但是就算这样解决了问题也不是我想要的结果,因为总不可能永远通过在XP下编译来解决兼容性问题。
回复 点赞
Dangyuhang 2009年12月12日
[Quote=引用 6 楼 seamour 的回复:]
我该说啥,无知是无知者的墓志铭?你根本不懂什么叫进程空间,还什么输入法跟你的内存占用没关系

[/Quote]

那你能给我详细解释一下,为什么吗?上来就盛气凌人,感觉你好像掌握了天下第一的大秘密,就一抖王八之气开始藐视其他人。请问你能说出个所以然来吗?有数据和理论吗?我好像就看到你在冒酸气而已啊。你除了说我什么都不懂之外还会说什么别的吗?
唉,上来发个帖就遇到一个SB。扫兴啊。
回复 点赞
QQ286251099 2009年12月12日
小秋
哈哈
回复 点赞
Harryfin 2009年12月12日
楼主试试直接拿到XP下编译
回复 点赞
Seamour 2009年12月12日
我该说啥,无知是无知者的墓志铭?你根本不懂什么叫进程空间,还什么输入法跟你的内存占用没关系
回复 点赞
Dangyuhang 2009年12月11日
[Quote=引用 2 楼 sz_haitao 的回复:]
d2010?d7写的呢?
[/Quote]

不知道,没有装D7,LS有条件的话试试看吧。
回复 点赞
haitao 2009年12月11日
d2010?d7写的呢?
回复 点赞
hjkto 2009年12月11日
占5m,算正常吧
回复 点赞
发动态
发帖子
Delphi
创建于2007-08-02

1474

社区成员

26.2w+

社区内容

Delphi 开发及应用
社区公告
暂无公告