开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

楼主: 落款hMZ
打印 上一主题 下一主题
收起左侧

[讨论] 易语言开发web容器的必要性,可行性讨论

[复制链接]
结帖率:82% (9/11)
11
发表于 2017-7-4 11:33:28 | 只看该作者   广东省深圳市
落款hMZ 发表于 2017-7-4 10:23
受教了,不过我有个疑问,如果利用易语言自身的内存管理呢?尽量使用易语言基本变量,让底层自己释放,这 ...

内存碎片一般是由于空闲的连续空间比要申请的空间小,导致这些小内存块不能被利用。产生内存碎片的方法很简单,举个例:  
    假设有一块一共有100个单位的连续空闲内存空间,范围是0~99。如果你从中申请一块内存,如10个单位,那么申请出来的内存块就为0~9区间。这时候你继续申请一块内存,比如说5个单位大,第二块得到的内存块就应该为10~14区间。  
    如果你把第一块内存块释放,然后再申请一块大于10个单位的内存块,比如说20个单位。因为刚被释放的内存块不能满足新的请求,所以只能从15开始分配出20个单位的内存块。  
    现在整个内存空间的状态是0~9空闲,10~14被占用,15~24被占用,25~99空闲。其中0~9就是一个内存碎片了。如果10~14一直被占用,而以后申请的空间都大于10个单位,那么0~9就永远用不上了,造成内存浪费。  
    如果你每次申请内存的大小,都比前一次释放的内村大小要小,那么就申请就总能成功。
=============================================================
         内存碎片多是看不见的,因为碎片同样是空闲的空间,这就会照成一种假象,系统仍然有大量空闲内存,但却无法使用,因为找不到足够分配的连续空间了。
===========================================================
         内存的申请释放是无处不在的,并非在调用API的时候,比如你要用文本型,字节集,数组,类,自定义数据类型等待都会需要申请内存,而这些地方的内存申请和释放都是由易语言自动给你完成的你没有控制权。

===========================================================
         内存管理,即要尽可能的合理使用内存,能够自动回收和处理碎片,使用智能对象,智能指针等等。

点评

是否能用局部内存池来解决这个问题呢(分页式内存管理)?   柬埔寨  发表于 2018-1-4 14:56
回复 支持 反对

使用道具 举报

头像被屏蔽
结帖率:14% (1/7)
10
 楼主| 发表于 2017-7-4 10:28:52 | 只看该作者   湖北省孝感市
xydk 发表于 2017-7-4 10:07
生意看人做,代码看什么人写。想法错了,但是万一作者是个乔布斯那样执着的人,也是可以成功的。
你要问问 ...

有需求就会有人去做,当然并不是要每个人都去写一个web容器,只是讨论有些人是否需要这个东西,是否有能力去开发出来,如果你确定你的项目里很需要一个易语言写的web容器,并且你的项目目前盈利可以,换了web容器后执行效率更高,那什么不去做呢?

如果你现在手头有个赚钱的项目,用到了http服务器,然而因为某些原因你不满意,你认为换了易语言写的容器后可以赚更多的钱,或者可以节约更多的服务器开支,那当然会去做了
回复 支持 反对

使用道具 举报

头像被屏蔽
结帖率:14% (1/7)
9
 楼主| 发表于 2017-7-4 10:23:55 | 只看该作者   湖北省孝感市
黑猫よ__ 发表于 2017-7-4 09:43
易语言对于内存的管理限制,使得你基本丧失了对其的控制权,这也就注定了其并不适合用于制作服务端软件(专业 ...

受教了,不过我有个疑问,如果利用易语言自身的内存管理呢?尽量使用易语言基本变量,让底层自己释放,这样不会造成内存碎片什么的吧,从4月份开始,我的易语言编写的web已经有2个月没关机重启了,内存基本没增加多少

2个月之前这个数是9M,现在是19M,两个多月内存增加了10M,并且这是因为 易语言 取现行时间() 这个命令在多线程下的内存泄露造成的
即使是IIS,也会在固定的一个时间重启应用池里的程序,以释放内存
所以你说的迟早会被内存碎片淹没这个我没有感觉到,所以我猜测你所说的内存更迭消耗是否是指调用API的时候出现的问题?
数据结构问题,也是调用API的时候的问题,这个我做过adv32.dll里的API就明白,API支持不定格式,不定长度的数据结构,而易语言不行。我的办法是,尽量把数据结构作为一整个内存块来看待,了解一个结构体在内存中存在的形式,然后以内存操作取代直接访问结构体成员,尽量不使用RtlMoveMemory复制结构体,想要访问结构体内哪个成员,直接 指针到字节集()就可以了,由易语言申请的内存块,由易语言来释放,由API申请的内存块,由API来释放,这样,不但功能可以实现,内存也不会有什么泄露

点评

内存碎片一般是由于空闲的连续空间比要申请的空间小,导致这些小内存块不能被利用。产生内存碎片的方法很简单,举个例: 假设有一块一共有100个单位的连续空闲内存空间,范围是0~99。如果你从中申请一块内存   广东省深圳市  详情 回复 发表于 2017-7-4 11:33
回复 支持 反对

使用道具 举报

8
发表于 2017-7-4 10:07:07 | 只看该作者   广东省汕头市
生意看人做,代码看什么人写。想法错了,但是万一作者是个乔布斯那样执着的人,也是可以成功的。
你要问问,易语言的作者屁股下面坐着能用于开发不干事埋头写代码的钱力,和他的毅力。
这2点才是最靠谱的。
回复 支持 反对

使用道具 举报

结帖率:82% (9/11)
7
发表于 2017-7-4 09:43:19 | 只看该作者   广东省深圳市
易语言对于内存的管理限制,使得你基本丧失了对其的控制权,这也就注定了其并不适合用于制作服务端软件(专业的),大量的临时性访问会带来非常高的内存更迭消耗,如果没有适当的内存管理措施,迟早会被内存碎片淹没,其次还有数据结构的局限性,易语言本身提供泛式数据存储容器可选的余地实在是过少(仅有数组),如何高效有序的管理数据也是比较头疼的一环。总得来说要想做容易,要想做得好就很难。
回复 支持 反对

使用道具 举报

结帖率:100% (3/3)
6
发表于 2017-7-4 09:08:40 | 只看该作者   河南省周口市
不明觉厉,继续看看
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)
地下
发表于 2017-7-4 08:57:06 | 只看该作者   河南省郑州市
小牛大大 发表于 2017-7-4 08:19
虽然不懂,但是感觉很强大的样子

虽然不懂,但是感觉很强大的样子
回复 支持 反对

使用道具 举报

结帖率:100% (5/5)

签到天数: 14 天

地板
发表于 2017-7-4 08:54:06 | 只看该作者   广东省揭阳市
这文章,要顶
回复 支持 反对

使用道具 举报

结帖率:58% (7/12)

签到天数: 2 天

板凳
发表于 2017-7-4 08:19:20 | 只看该作者   山西省吕梁市
虽然不懂,但是感觉很强大的样子
回复 支持 反对

使用道具 举报

结帖率:67% (29/43)

签到天数: 6 天

沙发
发表于 2017-7-4 08:16:28 | 只看该作者   湖南省益阳市
前排瓜子花生
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:[email protected]
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表