diff --git a/benchmark/query_cache.php b/benchmark/query_cache.php
new file mode 100644
index 000000000..270451196
--- /dev/null
+++ b/benchmark/query_cache.php
@@ -0,0 +1,71 @@
+hasColumn('id', 'integer', 20, 'autoincrement|primary');
+ $this->hasColumn('name', 'string', 50);
+ }
+}
+
+$dbh = new Doctrine_Db('sqlite:test.db');
+$conn = Doctrine_Manager::getInstance()->openConnection($dbh);
+// initialize some entities
+
+$coll = new Doctrine_Collection('Entity');
+$i = 10;
+while ($i--) {
+ $coll[$i]->name = 'e ' . $i;
+}
+$coll->save();
+$conn->clear();
+
+$timepoint = microtime(true);
+
+$i = 100;
+$query = new Doctrine_Query();
+$query->setOption('resultSetCache', new Doctrine_Cache_Array());
+
+while ($i--) {
+ $query->from('Entity e')->where('e.id > 0');
+ $coll = $query->execute(array(), Doctrine::FETCH_ARRAY);
+}
+print 'EXECUTED 100 QUERIES WITH CACHING ENABLED + FETCH_ARRAY : ' . (microtime(true) - $timepoint) . "
";
+
+$timepoint = microtime(true);
+
+$i = 100;
+
+while ($i--) {
+ $query = new Doctrine_Query();
+ $query->from('Entity e')->where('e.id > 0');
+ $coll = $query->execute(array(), Doctrine::FETCH_ARRAY);
+}
+print 'EXECUTED 100 QUERIES WITHOUT CACHING + FETCH_ARRAY : ' . (microtime(true) - $timepoint);
+
+$timepoint = microtime(true);
+
+$i = 100;
+$query = new Doctrine_Query();
+$query->setOption('resultSetCache', new Doctrine_Cache_Array());
+
+while ($i--) {
+ $query->from('Entity e')->where('e.id > 0');
+ $coll = $query->execute();
+}
+print 'EXECUTED 100 QUERIES WITH CACHING ENABLED + FETCH_RECORD : ' . (microtime(true) - $timepoint) . "
";
+
+$timepoint = microtime(true);
+
+$i = 100;
+
+while ($i--) {
+ $query = new Doctrine_Query();
+ $query->from('Entity e')->where('e.id > 0');
+ $coll = $query->execute();
+}
+print 'EXECUTED 100 QUERIES WITHOUT CACHING + FETCH_RECORD : ' . (microtime(true) - $timepoint);