I'm in the process of testing ESENT (Extensible St开发者_JAVA百科orage Engine) from Microsoft for my company. However, I have weird performance results.
In comparison of similar technologies (SqLite), the performance was very weak when reading the data.
In my performance test, I read more or less randomly all data in the database. I do not read the same data twice, so I think that the cache cannot help me. I run the test many times to have the speed when the data is "hot". I use an index on an id of type long. I use the following functions :JetSetCurrentIndex, JetMakeKey, JetSeek and JetRetrieveColumn to read.
In Windows Vista, I activated the parameter JET_paramEnableFileCache and it did miracles and was even faster than SqLite.
However, since this parameter is available on Windows Vista or later, the performance in Windows XP is nothing comparable to SQlite (like 15x slower). It reads on the disk every time. When using Sqlite on Windows XP, all read tests (except the first) doesn't read on the disk.
Am I missing another parameter or something that would make the difference ?
Thanks a lot !
If JET_paramEnableFileCache is helping then you must be terminating and restarting the process each time. JET_paramEnableFileCache was introduced to deal with applications which frequently initialize and terminate, which means the OS file cache has to be used instead of the normal database cache.
If you keep the process alive on XP then you will see the performance when the data is "hot".
@Spaceboy: I was thinking this myself ... but do you replace the ESENT.DLL in the windir\system32 ? Sometimes I succeeded by putting the DLL into my \bin subdir ...
精彩评论