这样效率会比include一个保存有数组词典的文件高很多么?
我觉得如果可以保存到内容,至少不用每次都去读文件了,这个词典有几十兆的。
我觉得如果可以保存到内容,至少不用每次都去读文件了,这个词典有几十兆的。
解决方案 »
- 如何在一个页面里面打开两个服务器的数据库去查找表单。
- 大家好!今天我在安装window2003 中安装时遇到不能显示的问题?有谁能帮帮忙?谢谢
- ecshop怎么实现在线实时手机缴费功能?需要什么接口,或者怎么开发?有成功示例吗,向大神求助
- 高分求解 ***论坛的安全性设计需要什么***100分求安全
- 关于php的一点点理解,希望得到大虾门帮助,进者有分啊.
- phpmyadmin配置问题 急!!!
- PHP2.3之后,post类要用$HTTP_POST_VARS取得,get 类的要用$_REQUEST取得,如何配置才可以不用$_REQUEST也可取得?
- web程序为了安全,一般的要求输入用户名和密码,如何制作,
- 如何从右边取一段字符串?
- 关于javascript中的showModalDialog方法与php页面调用的问题
- php解析数据库中取出的html代码问题
- 广州诚招网站设计师
以后每次需要使用词库的时候就重复上面的步骤。另外有点不明白的地方,是不是每次使用都要把词库先完全从内存中读取出来?这样效率怎么样?
//获取共享内存空间中的前10兆个字节的内容,假设词典10兆
$share = shmop_read($shm_id, 0, 10485760);另外
//申请10兆字节共享内存空间
$shm_id = shmop_open(0xff3, "c", 0644, 10485760);
内存空间会不会有限制呀?服务器1G的内存,呵呵,我对操作内存操作一窍不通的。
$words=array('aaa','bbb','ccc','ddd');
//申请共享内存空间
$shm_id = shmop_open(0xff3, "c", 0644, 10485760);
//序列化
$value = serialize($words);//写入共享内存空间
shmop_write($shm_id, $value, 0);//获取共享内存空间中的内容
$my_string = shmop_read($shm_id, 0, strlen($value));
shmop_close($shm_id);
?>2.php<?php//申请共享内存空间
$shm_id = shmop_open(0xff3, "c", 0644, 10485760);//获取共享内存空间中的内容
$my_string = shmop_read($shm_id, 0, 10485760);//反序列化
$words = unserialize($my_string);//输出test对象的num成员值
print_r(words);
?>
先执行1.php
后执行2.php2.php和1.php可以不在一个会话中服务器restart后共享内存内容才会消失
以上程序在windows下没问题
win2003 php 5.1.2
Fatal error: Call to undefined function: shmop_open()
还要在PHP.ini中打开 extension=php_shmop.dll 才能使用。
你也可以试试使用虚拟磁盘,把内存划一块出来做磁盘嘛。
1、因为在linux和win32中的内存管理机制不同,因此php也需要使用不同的扩展库来操作。
2、php的共享内存函数功能较弱,只能整块的读取和写入使用序列化数据的方法并不可取
1、对于数组,serialize后的串比var_export得到串要大近一倍。这样很不划算
2、unserialize是在php有限内存(默认8m)中进行的,对于数兆的数据的反序列话很困难对于较大的字典数据应保存为定长记录文件。
在一个已排序的定长记录文件中用文件函数查找记录是很快的,所以没有必要加载到内存。
为了加快文件的读取,你还可以把文件放入内存驱动器