i try to use the the querycache, and i found the cached was always been the same!!
so, the bug in MostRecentlyUsedCache<T>
cacheIndex = -1;
for (int i = 0, n = this.list.Count; i < n; i++)
cached = this.list[i];
if (fnEquals(cached, item))
cacheIndex = 0;
break; // look this! about line 106