Hi Bill,
I could really use your input and guidance. In order to justify that our
similar efforts have not been a waste of effort, here is what we have
achieved so far:
Our current project (implemented in C#) does a lot of computations and
creates a large (multi-gigabyte) results set.
The original design/implementation was done according to standard or common
..NET recommended "best practices", to the best of our ability. The app took
about 48 hours to create a certain results set. Careful, but simple changes
cut this time in half and some people thought that was the best that could
be done. (BTW, we use the ANTS profiler.)
However, using very creative approaches, but still sticking with good OO C#
code, we can now generate this size results set in 2 hrs 45 min. Saving over
21 hours is significant! It makes the app viable and competitive with unix/c
implementations. We believe this proves that C# can meet or exceed C
performance in the scientific data crunching arena.
We are doing various things to achieve this performance, but in every case,
our biggest gains have come from implementing our own code to replace stuff
that was offered in the framework. You might call this the creation of
"parallel but equivalent" code. However, we have achieved what most people
considered impossible (in terms of performance) for a C# number cruching
app.
As one small example, we implemented our own persistence (replacing .NET
binary serialization). This gave us a 100 fold improvement (ie, 10,000%).
That's not "a few percentage points".
I don't want to sound arrogant, and I'm not implying that we have all the
answers -- we don't. We are relatively inexperienced in C# and .NET. I would
really appreciate your input on this issue of how to implement a
minimalistic datatable equivalent. I doubt we can do that without some input
from folks like yourself. However, once we get started and then complete
this, I am optimistic that it will give us significant performance gains --
because we have *numerous* examples of this already. If you will help me get
started, I'll report the results in the newsgroup and we can find out
whether or not this particular implementation was a waste of time for us.
Regards,
David