Oct 11

Caprock Dictionary: Thread-safe ASP dictionary component

A thread-safe dictionary component for use in the Session and Application instead of the built-in scripting.dictionary component, which is not thread-safe. I did not write this component. The original author has evaporated, so I have archived it for the betterment of mankind.

The Dictionary Object is a COM component designed to work with any scripting environment (it also supports native interfaces within Visual Basic and Visual C++). Whether you are using IIS/ASP or you are using the Windows Script Hosting environment, you can use this object to store items with an associated key. The key and the item can be any automation compatible data type such as strings, numbers and other automation objects.

This object is designed to be a replacement for the Scripting.Dictionary object. Special consideration has been made for the Dictionary object to work with IIS/ASP’s intrinsic Application and Session objects. You can store a reference to a Dictionary object in one or both of these objects without affecting the performance of your web application. This is accomplished by marking the Dictionary COM component as both apartment and free-threaded, aggregating the Free-Threaded Marshaler. Refer to Don Box’s excellent article, “House of COM”, Microsoft Systems Journal (now MSDN Magazine), September 1998. In the article he explains the impact each apartment model has on the performance of IIS and ASP. This component was developed with VC++ 6.0 and ATL 3.0 for the best performance possible.

Attached File Download the 78k zip file containing the DLL, source code, samples and documentation.

Oct 09

Storing Variable-Length Decimal Data

If you have lots (and I mean LOTS — we have 175 GB of school-related data, and our biggest per-table savings would have been 1.5 MB) of nulls in decimal/numeric columns with large precision, you may be able to save noticeable space with vardecimal, which requires only 2-4 bytes per column when the column is 0 or null.

Oct 08


A spinlock is a very lightweight lock used for accessing things which must be synchronized, like caches. They don’t show up in the queryable wait indicators. When there is contention for them, you’ll see lots of runnable (waiting to run) processes. This is more likely to happen on x64 systems because the caches can get bigger.