03/03/2026
OfflineHi,
We are developing an OPC UA server based on on the library 'OPCFoundation.NetStandard.Opc.Ua.Server'. The server exposes data of building automation controllers (up to 500 devices). We are now a bit worried that the address space will take up too much RAM, since each object is represented by a number of nodes that must be stored in memory.
What generally consumes the most memory in an OPC UA server? Is it the storage of the address space, or other factors such as subscriptions and monitored items?
Please guide us regarding memory consumption in an OPC UA server. Maybe we're worrying about nothing?
How we are currently working:
We model our object types in a ModelDesign.xml file and then compile it with ModelCompiler. Then we load the .uanodes file generated by the compiler in our node manager class. To add an object (set of nodes) to the address space of the server we create an object instance of one of the classes that are generated by the compiler and then call CreateNode with that instance as inparameter (we also create references). As we understand the address space (all nodes) are cached in CustomNodeManager2::m_predefinedNodes.
05/30/2017
OfflineThe generated C# classes are great for small servers or if a rapid prototype is needed, however, if your production application has high requirements you will likely want to invest a NodeManager that is designed for your data.
The understand the value of this approach you must see a UA information model as a window on your data rather than a database.
What this means is you do not need represent a device as 10+ nodes in memory. You instead build a NodeId structure that allows to response to Browse/Read/Write/Call on demand.
This means the only thing you actually need in memory is a structure that describes your device. All of the information associated with various Nodes used to represent your device are collected on demand by merging the static model with the device specific data..
To illustrate this concept a NodeManager for 100 million Nodes was implemented here:
1 Guest(s)


Log In

Usage Policy