[Quickfix-developers] Fwd: C# QuickFIX
Brought to you by:
orenmnero
From: Oren M. <or...@qu...> - 2004-05-07 14:15:48
|
Here are more details on Reuters analysis on the .NET vs. C++ API's. To my knowledge the java API does not have a similar instability, but performance will probably be comparable. --oren Begin forwarded message: > From: Yihu Fang <Yih...@re...> > Date: May 7, 2004 8:44:51 AM CDT > To: or...@qu..., jc...@co... > Subject: FW: C# QuickFIX > > Oren, > > I redid the C# test. The code is a simple stress test - basically there > is a while loop in Application::run() which reads each FIX message from > the MSMQ and then Session.sendToTarget(). > > When we have large number of messages (50000) in the queue, the test > code starts to choke and throws NULL exceptions (mostly) as well as > other exceptions. If we change the directive [STAThread] to [MTAThread] > for better multithread garbage collection, it still happens. And if we > use ThreadedSocketInitiator instead of the single thread class, it > sometimes got worse. It happens on both Release and Debug code. It is > QuickFIX 1.6 (it was done 2 months ago and since we have moved C++ base > to 1.7). > > As for performance, I ran both QF endpoints in C++ code, it can pump > 50000 messages in 30+ seconds on my laptop (Thinkpad T40). If I choose > one end as C# code and one end as C++, it at least takes twice as long > to complete (with some exceptions thrown in C#), and the C# process > takes 3 times as many as resources as the C++ code (memory and CPU). > > I include some typical exception stack as following. Hope it helps. The > problem for us is its unpredictability in C#. > > Regards, > > -Yihu > ----------------------------------------------------------------------- > - > - > Exception(System.NullReferenceException): Object reference not set to > an > instance of an object. at FIX.FieldMap.=(FieldMap* , FieldMap* ) > at FIX.Message.=(Message* , Message* ) > at Application.toApp(Application* , Message* message, SessionID* > sessionID) > at FIX.Session.sendToTarget(Message* ) > at QuickFix.Session.sendToTarget(Message message) > at tradeclient_csharp.Application.run() in > c:\csharp\tradeclient_csharp\application.cs:line 132 > 8=FIX.4.0?9=78?35=D?49=FIXTEST?56=TW?11=123?21=1?38=456?40=2?44=789? > 54=1 > ?55=IBM?59=0?128=FID?10=101? > > Exception(System.Runtime.InteropServices.SEHException): External > component has thrown an exception. > at FIX.FieldMap.=(FieldMap* , FieldMap* ) > at FIX.Message.=(Message* , Message* ) > at Application.toApp(Application* , Message* message, SessionID* > sessionID) > at FIX.Session.sendToTarget(Message* ) > at QuickFix.Session.sendToTarget(Message message) > at tradeclient_csharp.Application.run() in > c:\csharp\tradeclient_csharp\application.cs:line 132 > 8=FIX.4.0?9=78?35=D?49=FIXTEST?56=TW?11=123?21=1?38=456?40=2?44=789? > 54=1 > ?55=IBM?59=0?128=FID?10=101? > > Exception(System.Runtime.InteropServices.SEHException): External > component has thrown an exception. > at std.basic_string<char,std::char_traits<char>,std::allocator<char> >> .__ctor(basic_string<char,std::char_traits<char>,std::allocator<char> >> * , basic_string<char,std::char_traits<char>,std::allocator<char> >* ) > at FIX.FieldBase.__ctor(FieldBase* , FieldBase* ) > at > std._Tree_nod<std::_Tmap_traits<int,FIX::FieldBase,FIX:: > message_order,st > d::allocator<std::pair<int const ,FIX::FieldBase> >,1> >> ._Node.__ctor(_Node* , _Node* _Larg, _Node* _Parg, _Node* _Rarg, > pair<int const ,FIX::FieldBase>* _Val, SByte _Carg) > at > std._Tree<std::_Tmap_traits<int,FIX::FieldBase,FIX:: > message_order,std::a > llocator<std::pair<int const ,FIX::FieldBase> >,1> >> ._Buynode(_Tree<std::_Tmap_traits<int,FIX::FieldBase,FIX:: >> age_order,std > ::allocator<std::pair<int const ,FIX::FieldBase> >,1> >* , _Node* > _Larg, > _Node* _Parg, _Node* _Rarg, pair<int const ,FIX::FieldBase>* _Val, > SByte > _Carg) > at FIX.FieldMap.=(FieldMap* , FieldMap* ) > at FIX.Message.=(Message* , Message* ) > at Application.toApp(Application* , Message* message, SessionID* > sessionID) > at FIX.Session.sendToTarget(Message* ) > at QuickFix.Session.sendToTarget(Message message) > at tradeclient_csharp.Application.run() in > c:\csharp\tradeclient_csharp\application.cs:line 132 > 8=FIX.4.0?9=78?35=D?49=FIXTEST?56=TW?11=123?21=1?38=456?40=2?44=789? > 54=1 > ?55=IBM?59=0?128=FID?10=101? > > > > > -----Original Message----- > From: Yihu Fang > Sent: Thursday, May 06, 2004 3:14 PM > To: 'or...@qu...' > Cc: jc...@co... > Subject: RE: C# QuickFIX > > Oren, > > What we saw is that the QuickFix .NET throws null exceptions > occasionally on some of the messages when we pump large amount of > message (like 10000) without throttling through the engine. The message > is one identical single order message. We were using VS.NET 2003. > > We are moving to QuickFIX C++ implementation with VC7 compiler. I will > try to reproduce the problems when I get chance. > > Regards, > > -Yihu > > -----Original Message----- > From: or...@qu... [mailto:or...@qu...] > Sent: Thursday, May 06, 2004 2:04 PM > To: Yihu Fang > Cc: jc...@co... > Subject: C# QuickFIX > > Yihu, > > At the SIMC conference you mentioned that you guys had problems with > the > QuickFIX .NET API. I was wondering if > you can share any more details about this. Were the problems you had > encountered just stability problems or > were there also performance issues? We are getting more and more > inquiries about the .NET interface and I > would just like to gather as much useful information as I can. Also > when you were doing your testing was that > with VS.NET 2002, or 2003? Thanks. > > --oren > > > > ----------------------------------------------------------------- > Visit our Internet site at http://www.reuters.com > > Get closer to the financial markets with Reuters Messaging - for more > information and to register, visit http://www.reuters.com/messaging > > Any views expressed in this message are those of the individual > sender, except where the sender specifically states them to be > the views of Reuters Ltd. > > |