Open PietheinHeemskerk opened 5 years ago
The key limitation is with the underlying database and has been there for a very long time. Unfortunately, I don't think it will change anytime soon so the 2000 byte limit will remain.
The key limitation is with the underlying database and has been there for a very long time. Unfortunately, I don't think it will change anytime soon so the 2000 byte limit will remain.
I'm fine with the 2000 byte limit and did not request for any change in that limit.
I would like to have this limit enforced e.g. when constructing a PersistentBlob. If the number of bytes passed in is more than 2000 then it should throw an ArgumentException since the cache behavior will become inconsistent as stated in the original description.
Ah, I see now. I'll take a look and try to fix that.
When you add items with long keys (I used ODATA Urls as key which can become quite long) it is acceptable to add keys longer than 2000 bytes. The AllKeys also works fine. However when you use Contains or TryGetValue then this key cannot be found. After some source code inspection it turned out that there is a constant Microsoft.Isam.Esent.Interop.KeyMostMost with a value of 2000 so the Cache class does not work properly. A possible fix would be to change the debug check in the Microsoft.Isam.Esent.Interop.MemoryCache.Duplicate method should be enforced at runtime.