Click here to Skip to main content
Click here to Skip to main content

Optimize your C# with Inline ASM via ATL and C++

, 10 Nov 2003
Rate this:
Please Sign up or sign in to vote.
Optimize your C# with Inline ASM via ATL and C++


This solution demonstrates as simply as possible how to leverage inline assembly and C++ ATL from a C# project. This architecture may be used to optimize .NET web services, .NET web applications, .NET Windows applications and .NET Windows services without any third party assemblers. This is particularly useful for optimizing C# code with C++ in Visual Studio .NET centric build environments, brought to you by “Free and easy artificial intelligence chatbot hosting”.

Does the COM layer slow it down?

The COM layer itself is very slow for this example and this architecture will not be efficient for small calculations. This is more practical for real-time embedded systems such as medical devices or aerospace where large calculations must be completed fast. Rather then being limited to C++ developers, the company can use this architecture to their C# developers and then a few C++ developers to optimize the large algorithms in ASM. This can even more easily be done without the COM layer via linking a 100% ASM DLL into the .NET project but lacks the benefits of tool tips, reference counting, deployment version control etc.

This example simply provides a minimal example of C#->ATL/C++->Inline Assembly/ASM because a complex algorithm would make it less feasible for most users to understand the architecture.

In short, overhead for COM Marshaling is relatively constant and algorithm complexity grows. Hence the larger the calculation, the overhead of the COM marshaling time becomes smaller relative to the calculation time. Far too often coders go all out on optimization and loose things like tooltips for the sake of optimization, forgetting that the overhead of marshaling is relatively small compared to their optimization.

O(COM Marshaling Overhead + algorithm execution time)

Sample screenshot

For example, if the COM marshaling overhead is lets say 2 units of time and the execution time (in this example) is 0.00001, the overhead is larger then the algorithm execution time. However, if the algorithm takes 100 units of time in C# and 50 units of time in C/C++/ASM, then the time to execute is 50 units of time + 2 units of time. The overall time is 52 units of time which is relatively close to 50 units of time (as would be the case of directly including an ASM DLL and skipping the COM layer and loosing tooltips). For most business needs, 2 more units of time for COM marshaling is worth the scalability advantages when their algorithms take 50 units of time.

What are tool tips and how can ASM binaries have tooltips?

Tooltips include: auto-complete triggered by member access operators in an IDE, mouse over bubble help that shows signature info, etc. These are not possible with primitive ASM binaries. And no, you will not have tool tips if you build an ASM binary and link it into a .NET application as .NET application, unless you exposed standard COM or other .NET recognized architecture. That would be a substantial amount of unnecessary work and would destroy the feasibility for large ASM optimizations. Anyhow, tooltips and supporting architectures is outside the scope of this article. But just for kicks, in the ATL case, ATL generates code that exposes an interface called IDispatch as well as a direct “vtable” interface, when “duel” is selected in the ATL wizard, which is called by the target IDE (.NET interop, VB6, etc.) used to generate tooltips during development of the binary’s host. Many other architectures are used by IDEs to generate tool tips, for example when .NET makes a web reference to a SOAP server that exposes WSDL, the WSDL is downloaded and used to generate tooltips for the SOAP server’s methods. For an example of WSDL that is used to generate tooltips in .NET IDEs see the TANU WSDL[^].

Sample screenshot


This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


About the Author

Web Developer
United States United States
Keep on coding!

Comments and Discussions

GeneralStop! Pinmemberantecedents31-Jan-08 14:38 
QuestionWhy? Pinmemberantecedents31-Jan-08 14:35 
QuestionThis VERY COOL: has anyone seen ? PinsussAnonymous9-Jan-04 15:43 
QuestionWhy COM? PinsussPaul Reeder19-Nov-03 1:07 
Generalits much easier than that... PinsussAnonymous12-Nov-03 0:49 
GeneralRe: its much easier than that... Pinmemberlonetron12-Nov-03 12:46 
GeneralTooltips? Pinmemberdog_spawn12-Nov-03 14:55 
GeneralRe: Tooltips? Pinmemberlonetron12-Nov-03 15:23 
GeneralRe: its much easier than that... PinmemberColin Angus Mackay20-Apr-04 13:21 
GeneralSome timings would be great... PinmemberDaniel Turini11-Nov-03 9:58 
Because I seriously doubt that your sample is faster than doing it on pure C# or in managed C++. And I think that several other people here will have the same kind of doubt...

Trying to make bits uncopyable is like trying to make water not wet.
-- Bruce Schneier

By the way, dog_spawn isn't a nickname - it is my name with an underscore instead of a space. -- dog_spawn

GeneralRe: Some timings would be great... Pinmemberlonetron12-Nov-03 13:01 
GeneralNot convinced... Pinmemberdog_spawn12-Nov-03 15:01 
GeneralRe: Not convinced... Pinmemberlonetron12-Nov-03 15:44 
GeneralRe: Some timings would be great... PinmemberDaniel Turini13-Nov-03 1:01 
GeneralRe: Some timings would be great... Pinmemberlonetron13-Nov-03 9:23 
GeneralHmm PinmemberJörgen Sigvardsson5-Nov-03 13:00 
GeneralThis is more practical for real-time embedded systems such as medical devices or aerospace where large calculations must be completed fast. Pinmemberlonetron7-Nov-03 11:50 
GeneralConfused Pinmemberdog_spawn11-Nov-03 10:29 
GeneralRe: Confused PinmemberSaurweinAndreas12-Nov-03 5:02 
GeneralRe: Confused Pinmemberlonetron12-Nov-03 13:28 
GeneralRe: Confused Pinmemberdog_spawn12-Nov-03 14:50 
GeneralRe: Confused Pinmemberlonetron12-Nov-03 15:47 
GeneralRe: Confused Pinmemberlonetron12-Nov-03 15:47 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web03 | 2.8.150327.1 | Last Updated 11 Nov 2003
Article Copyright 2003 by dzzxyz
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid