We are currently using RFA.NET 8.0.1 and we have seen approximately 35% extra memory usage when switching to RFA.NET from our previous code which used an older version of the C++ RFA libraries. We also compare the memory usage using StarterConsumer from RFA C++ and RFA.NET package requesting just one RIC which has no update from the same server and found that StarterConsumer from RFA C++ 8.0 using just 37-40 MB of memory usage after receiving the Refresh but RFA.NET 8.0 use around 120 MB.
I understand that RFA.NET is .NET wrapper built on top of RFA C++ but I still not understand why it take up 120 MB when C++ use just around 40MB. While our application is currently working correctly, memory usage is always a concern for a high-performance application using RMDS, as it is likely to lead to more or longer garbage collection cycles.
Do you know what may cause the extra memory usage and is there any configuration or implementation to improve the memory foot print?
The behaviour seems to relate with internal implementation of RFA.NET Dictionary management which making unnecessary memory allocation for loading dictionary information. For general use case, the application just have one instance of dictionary object therefore I believe that the behavior should not cause any error.
Anyway latest version of RFA.NET 8.1.0.L1 has re-implement the dictionary management to enhance memory allocation for dictionary information. Below is the information from the RFA.NET 8.1.0.L1 README file.
[RFA-382] - CaseId 05044930 RFA.NET making unnecessary memory allocation for loading dictionary information
Please upgrade your RFA.NET to 8.1.0.L1 . I did a quick test and found the memory usage from StarterConsumer reduce from around 120MB to around 48-50 MB when testing the example with the same scenario.