WinXP优先使用物理内存(禁用虚拟内存PageFile)

1. C:\WINDOWS\system.ini打开然后在最底下加一行参数ConservativeSwapfileUsage=1

2. CMD -> regedit

寻找HKEY_LOCAL_XXX\SYSEM\CurrentControlSet\Control\SessionManager\Memory Management点选Memory Management机码后请到右边寻找DisablePagingExecutive鼠标器点两下,把框框里原本的”0”改成”1”右边选十六进位。

1 comment

Windows下Xdebug & Cachegrind

XDebug 官方网站为:http://www.xdebug.org/
下载的时候请注意跟自己的PHP版本匹配

.dll文件改成php_xdebug.dll,在php.ini中加入

extension=php_xdebug.dll
[XDebug]
zend_extension_ts="yourpath\ext\php_xdebug.dll"
xdebug.profiler_enable="on"
xdebug.trace_output_dir="yourpath\xdebug-trace" 
xdebug.profiler_output_dir="yourpath\xdebug-profile"

wincachegrind下载地址:http://sourceforge.net/projects/wincachegrind/

Add a comment

PostgreSQL笔记(SQL语言注意点)

连接查询
注意区别以下三种情况

SELECT *
    FROM weather, cities
    WHERE city = name;
SELECT *
    FROM weather 
    LEFT OUTER JOIN cities ON (weather.city = cities.name);
SELECT W1.city, W1.temp_lo AS low, W1.temp_hi AS high,
    W2.city, W2.temp_lo AS low, W2.temp_hi AS high
    FROM weather W1, weather W2
    WHERE W1.temp_lo < W2.temp_lo
    AND W1.temp_hi > W2.temp_hi;

在聚集函数使用下WHERE 和 HAVING 的基本区别
WHERE 在分组和聚集计算之前选取输入行(它控制哪些行进入聚集计算),而 HAVING 在分组和聚集之后选取输出行。因此,WHERE 子句不能包含聚集函数;因为试图用聚集函数判断那些行将要输入给聚集运算是没有意义的。相反,HAVING 子句总是包含聚集函数。当然,你可以写不使用聚集的 HAVING 子句,但这样做没什么好处,因为同样的条件可以更有效地用于 WHERE 阶段。

Add a comment

PostgresSQL笔记(从头开始)

为何选择PostgreSQL
SUN已被Oracle收购,MySQL定位中小型数据库几乎为定局,真正开源的数据库除了非C/S的SQLite就只有PostgreSQL可以选择一下了。还有一点让人选择它的理由:

PostgreSQL 是目前世界上可以获得的最先进的开放源码数据库系统。

相关连接
官方网站
几个操作系统的下载点:
FreeBSD · Linux · Mac OS X · Solaris · Windows

创建数据库

#createdb -U 用户名 数据库名

进入数据库控制台

#psql -U 用户名 -d 数据库名

Add a comment

PHP 静态非静态方法属性的区别

以前总是没办法理解为什么PHP5里面的类要分静态方法跟一般的方法,属性也分静态属性跟一般的属性,之间区别一直不是很清楚,看了篇IBM developerWorks 中国中的开始了解 PHP V5 中的对象,下面整理下自己的心得。

类的方法、属性VS类实例化对象的方法、属性
静态方法不是类实例化后的方法,而是它自身的,所以可以直接用 类名::方法(参数) 这样的形式进行使用。在静态方法中不能使用非静态的属性和方法,其原因也简单,因为那些属性是给实例化后的对象使用的而不是类自身的,我们平时看到类中的 $this 可以理解为这个类将来实例化后的对象。

class Dictionary {
}
	
$obj1 = new Dictionary();
$obj2 = new Dictionary();
$obj3 = new Dictionary();

上面的$obj1到3都是Dictionary类所实例化后的对象,就可以将他们理解为Dictionary类中的$this ,因此他们可以使用Dictionary类中的所有相关方法或访问其属性,而且Dictionary中的静态方法它们也可以使用,但不能通过 $obj1::方法() 这样的方式,依然得使用 $obj1->方法()

但有个例外,对象无法使用类的静态变量,如果我们想这样去取一个类中的静态变量则会报错:

<?php
	
    class A
    {
        public static $foo = 'aaa';
        
        static function bar($a, $b)
        {
            return $a+$b.self::$var;
        }
    }
    
    $obj = new A();
    echo $obj->foo; // 这样就会出错
    echo A::$foo; // 应该这样访问
	
?>

总结:实例化的对象可以使用类中可使用方法,即便是静态的。用静态方式只能使用类中的静态方法,且该方法内不能有非静态的属性或是方法使用,比如

<?php
	
    class A
    {
        public static $var = 'aaa';
        public $a = 1;
        public $b = 2;
        
        static function add()
        {
            return $this->a + $this->b;
        }
    }
    
    echo A::add();
	
?>

A类的静态方法add中因为使用了该类的两个非静态属性所以导致出错,因此静态方法跟属性是属于类自身的,不能有任何依赖需要实例化的数据。

什么时候应该使用静态方法?
引用IBM developerWorks 文章中的话就是

“需要使用静态方法有两个重要原因。首先,实用程序操作可能不需要对象实例来做它的工作。通过声明为静态,为客户机代码节省了创建对象的工作量。第二,静态方法是全局可用的。这意味着可以设置一个所有对象实例都可以访问的值,而且使得静态方法成为共享系统上关键数据的好办法。”

结合上篇 php工厂模式的好处 静态方法还有一个好处是可以结合工厂模式,而且代码更加优雅。

此文章为原创,如需转载烦请注明出处

2 comments