AsproSet - Unmanaged Memory for .Net
The .Net framework has certainly eliminated a large class of memory issues, but in the rush
to simplify memory management and code security a large class of useful memory manipulation
techniques has fallen by the wayside. In particular, we at Asprosys have found that this
'throwing out of the baby with the bath water' has crippled C# (and .Net in general) in the
development of advanced system service software. AsproSet is our small contribution to reclaiming
the system software space for .Net.
Have you ever needed to share data between two applications? You probably used Remoting or WCF even
though both applications were on the same machine and always would be. For most of these cases
you were probably using the right approach but for a small but significant number using shared memory
would have been not only the superior method, but far superior.
Have you ever needed to use a small subset of a huge data space? Not too many people do but in the small
but significant number of cases where this is necessary (e.g. a spreadsheet type application) you
probably allocated a huge array even when only a small portion of it was needed or maybe used a dynamic
structure like a list and then jumped through hoops to ensure proper indexing and processing. In either
case the large performance penalty would not have been necessary if you could have used a sparse array.
Have you ever used a very large set of data that ended up clogged up in the large object heap? Again,
not too many situations lead to this problem but when you have it what would give for a deterministic
disposal of the large object?
They may be small in number but there are significant scenarios where better access to the many
memory management facilities of the underlying operating system would provide far superior solutions
to performance, reliability or architectural problems.
There was no reason to leave many of the elements supported by the AsproSet library out of the
.Net Framework other than time and perceived need. Now there is no reason to have to awkwardly section
out portions of an application to C++ code in order to take advantage of the numerous high performance
options provided by the underlying operating system.
For the next release of AsproSet the plan is to improve the docmentation and examples, as well as to add
support for shared dynamic collections such as lists, queues, etc. In the mean time we are always open to
suggestions so if you have a feature request post it on the AsproTools