I have a somewhat large (~100K lines) C++ server application. It uses Boost (lots of smart pointer use, thread use, regex), Xerces XML libraries, some MFC for GUI, and ADO for database access. I tried to build a test build of my application using Microsoft's Managed C++. I got all my code to compile, but I can't link to either Boost or Xerces XML. Is this possible? Has anyone done this? If I ultimately go the .NET route, I would replace Boost and Xerces with functionality provided by the native .NET runtime libraries. However, that would be a massive time consuming undertaking. At this point, I just want to dip my toes in the water and observe pros/cons of .NET, and have the option of migrating to .NET piecemeal. I have solid experience with C# and Java and I am extremely experienced with C++ (10 years). My main problems with C++ are: - Compile times. On my 2.8GHz dev system, a rebuild takes ~20 minutes and even a build after making a minor change takes 45 seconds. It's amazing how VC++ build speeds really have remained so stagnant despite increases in hardware speed. I realize VC++ is the slower of the IDEs for build times. - Debugging memory corruption or thread concurrency issues. This is much easier in Java/C# and the tools for assisting are much easier to use. I spent many days trying tools such as Purify for C++ and couldn't produce any fruitful results. - Diagnosing memory usage. My server application uses lots of memory. After running for several hours under production conditions it will reach around 400MB-1.3GB depending on the tasks its doing. I'd like to get a general overview of where this memory is being used. I don't suspect blatant memory leaks (new with no delete) but instead runaway caches or legitimate usage. These issues are of course still present in C#/Java but the diagnostic tools to address these issues seem to be much better. I haven't found any usable C++ tool for this issue and I rely on manually logging data points and manually trying to infer an idea of what is happening. - Java/C# is overall a better (easier/faster to develop/maintain) development platform for this type of server application work. However, I will happily stick with C++ if I can resolve these other issues. And I am of course, concerned about any performance hit when migrating to Java/C#. We max out CPU and RAM use, so these factors aren't important. I couldn't take more than a 25% drop in efficiency. Any other suggestions on my situation?
Roger Wilco wrote:
I have a somewhat large (~100K lines) C++ server application. It uses Boost (lots of smart pointer use, thread use, regex), Xerces XML libraries, some MFC for GUI, and ADO for database access.
I tried to build a test build of my application using Microsoft's Managed C++. I got all my code to compile, but I can't link to either Boost or Xerces XML. Is this possible? Has anyone done this?
Did you build a Managed C++ application, ie. did you compile with the /clr option ? If so, what is it that is not linking in Boost ? Only a few Boost implementations are libraries, so when you say you had problems linking, you need to be explicit about what failed and what linker errors you were getting ?
If I ultimately go the .NET route, I would replace Boost and Xerces with functionality provided by the native .NET runtime libraries.
No need to do this at all. You should have no problem using 3rd party non .NET libraries in .NET assemblies using Managed C++. The IJW facility of Manageed C++ ( It Just Works ) makes it pretty transparent to use 3rd party libraries.
participants (2)
-
Edward Diener
-
Roger Wilco