Tales from a Trading Desk

Noise from an Investment Bank

April 2004 - Posts

Battle of the VM's

With the delay to .NET 2,0 (H1 2005), it now appears that Java 1.5 will beat Microsoft with its Generic implementation.  Dr Haddon's Tiger presentation gives an idea of what Microsoft .NET 2.0 has to complete with.  In some respects Microsoft's .NET framework is ahead of the Java J2SE library - the CLR had a ThreadPool from 1.0, whereas Java 1.5 finally gets a ThreadPool in the java.util.concurrent library.  In other respects .NET appears to be behind Java when looking at the breadth of the library - for example collections.  Its nice to see that in Java 1.5 the enhanced loop appears to be close to the C# foreach.  CacheRowSet appears to sounds like a DataSet.  Java vs C# Generic is already well documented on the web, so I'm not going to follow in the comparison footsteps.

It’s also interesting to see the Java 1.6 is expected to be release during 2006, possibly around the Longhorn timeframe, when one assumes we should be getting another .NET release.

Posted: Apr 30 2004, 08:23 PM by mdavey | with 1 comment(s)
Filed under: ,
Improving .NET Application Performance and Scalability
Now available on MSDN.  I get a mention in the external reviewers section.
Posted: Apr 29 2004, 06:35 AM by mdavey | with 1 comment(s)
Filed under:
Native JMS Libraries for .NET

There appear to be a few JMS libraries available that work with .NET; Softwired, Fiorano.  Anybody used any of these libraries?

 

 

Posted: Apr 28 2004, 11:26 AM by mdavey | with no comments
Filed under: ,
Genuine Channels

Genuine Channels offers a bi-directional .NET Remoting channel that has some performance advantages over Microsoft's .NET Remoting native channels.  To compare TCP performance between Genuine and Microsoft's native channel, a simple C# client console applications and server was developed.   The tests were run between two Window XP machines, on a 100Mbps.  Each test was run four times, and each test comprised of 100 client-to-server method invocations, and 100 server-to-client callbacks.  No parameters were passed for each method invocation, apart from the client object reference needed for the callback test. All values are displayed in milliseconds.  This isn't an extensive test, but it does allow a basic comparison.

Note: Genuine Channels version 2.3.3 was used for the test.  Version 2.4.2 is already available, and probably has performance advantages over 2.3.3

Microsoft native channel (TCP)

Client->Server  2.0029       1.0015     1.0015  1.0015
Callback           52.2275   51.5772   49.7746  54.081

Genuine Channel with compression (GTCP)

Client->Server    4.7067    4.8069     4.7067    4.907
Callback           10.8154  11.1159   10.9156  11.6166

Genuine Channel without compression (GTCP)

Client->Server    2.3033  2.2031   2.2031   2.3033
Callback             8.412    6.4092   6.4092   6.309

As can be seen, Genuine Channel appears to out perform Microsoft's native channel in callbacks, but is slightly slower in client->server method calls.  Passing parameters would change the timing - the larger the payload, the slow the method call.

Posted: Apr 27 2004, 11:13 AM by mdavey | with 3 comment(s)
Filed under:
Server-Side .NET within Investment Banks

Investment banks have generally been slow in moving to .NET on there server side.  This can probably be contributed to a few reasons:

  • J2EE is already well entrenched on servers (Solaris, Linux, Windows) with investment banks
  • Microsoft is still seen as having a 'security' issue - a few banks have outlawed the deployment of IIS
  • There are multiple vendors offering J2EE application servers, whereas Microsoft is the only vendor offering a .NET application server today - COM+
  • A few investment banks are trying to move towards Linux - in a similar way to IBM

Client side .NET development on the other hand appears to be happening at a much faster rate within banks.

Banks like CSFB however, have always had a decent Microsoft presence server-side, and now it appears barcap are partially moving to .NET on the server as well. Interesting times...

Posted: Apr 26 2004, 11:18 PM by mdavey | with 2 comment(s)
Filed under:
Java VM

Its always interesting to keep an eye on multiple technologies.  Within investment banks, we're using Java,C++, Python and Microsoft .NET.  In the case of Java, the Sun HotSpot site provides some interesting documents and FAQ's that are worth a read.  Tuning Garbage Collection with the 1.4.2 Java VM has a few useful 'rule of thumb' points for server applications.

The Sun site also contains some excellent slides on Java performance:

  • Dr Cliff Click JavaOne 2003 'Performance Myths Exposed' slides. The 'Excepton' slide which talk about defeating JIT optimizations are interesting, and appear very similar to best practices on the CLR.  The 'Looking Forward' slide also appear similar for CLR usage.
  • John Coomes and Tony Printezis JavaOne 2003 'Garbage Collection in the Java HotSpot Virtual Machine' slides. No surprise that the CLR has generation as does Java. Finally, its interesting to note that object pooling can sometime damage application performance.
Posted: Apr 26 2004, 05:09 PM by mdavey | with no comments
Filed under:
Smallscript S#
Anyone using S# to develop a real application?
Posted: Apr 22 2004, 12:02 PM by mdavey | with no comments
Filed under:
Two Days, Two Presentations

Over the last two days we've presented two .NET presentations to a mixed audience of developers and managers at two different locations in the world.  The first presentation didn't go well initially, but by half time, things were turning around.  The second presentation went a lot better, with a lot of good question at the end of the day.  Overall, I'd have to say that these two days have been an education - up until this point we've really only presented to 'easy' audiences.

The first presentation generated the following interesting questions from the audience - primarily from managers.  If you think you have a good answer, please post it in the feedback section of the blog, thanks.

  • If a a company has a high percentage of J2EE applications servers already in production. What is the compelling technology reason to consider .NET on the server?  What is the compelling business reason to consider .NET on the server?
  • What major advantage does the C# language have over and above the Java language?
  • Given that .NET today is really only run on the Microsoft CLR, and Java J2EE can essentially run on Windows, Solaris and Linux, why would a company lock itself into the Windows OS, and thus move from Java J2EE to .NET?
  • Given that EMCA-335 only specified the semantics of System.MarshalByRefObject, and does not specify anything about how remoting is implemented, could Microsoft at some point in the future invalidate the Open Source Mono implementation of Remoting using patents or other means?

It's nice to see that Microsoft and Sun both play the End of Life game.

Posted: Apr 21 2004, 11:18 PM by mdavey | with 4 comment(s)
Filed under:
.NET Presentations

Tomorrow we start the .NET presentation circus I talked about before - we are actually doing two presentations this week, one tomorrow and one on Wednesday.  Each presentation consists of an introduction to .NET in the morning, followed by an advanced session in the afternoon.  We also have two demos that we'll be doing, one showing the interop between .NET and Java using WebServices, and another showing the interop with Microsoft Office. I'm hoping the presentations go well, although I think we need to improve the demos for subsequent presentations

VS 2005

Since I now have the Community Technical Preview (CTP) of Visual Studio 2005 installed on my Compaq, I thought I'd blog a few items on .NET 2.0

  • Here the official VS 2005 news blog
  • In NET 1.0/1.1, we had System.Threading.ThreadStart, now in NET 2.0, we also have ParameterizedThreadStart.
  • Nice to see that System.Threading.Thread now has a few new constructors that take maxStackSize.
  • EventArgs in 1.0/1.1 is Serializable, in 2.0 the Serializable attribute has been removed
  • System.Console now has a ReadKey method - about time
  • System.Diagnostics finally gets a StopWatch class
  • System.GC has a new method, AddMemoryPressure, to help flag the urgency of collecting a particular object with regards to unmanaged resource.
  • System.IO.Compression is a nice addition
Posted: Apr 17 2004, 08:48 PM by mdavey | with 1 comment(s)
Filed under:
More Posts Next page »