Return to
HomePage
Checklist: Remoting Performance
Source:
http://msdn.microsoft.com/library/en-us/dnpag/html/ScaleNetCheck07.aspJ.D. Meier, Srinath Vasireddy, Ashish Babbar, Rico Mariani, and Alex Mackman
Design Considerations
* Use .NET remoting for communicating between application domains in the same process.
* Choose the right host.
* Choose the right activation model.
* Choose the right channel.
* Choose the right formatter.
* Choose between synchronous or asynchronous communication.
* Minimize round trips and avoid chatty interfaces.
* Avoid holding state in memory.
Activation
* Use client-activated objects (CAO) only where you need to control the lifetime.
* Use
SingleCall server activated objects (SAO) for improved scalability.
* Use singleton where you need to access a synchronized resource.
* Use singleton where you need to control lifetime of server objects.
* Use appropriate state management to scale the solution.
Lifetime Considerations
* Tune default timeouts based on need.
Hosts
* Use Internet Information Services (IIS) to authenticate calls.
* Turn off HTTP keep alives when using IIS.
* Host in IIS if you need to load balance using network load balancing (NLB).
Channels
* Use
TcpChannel for optimum performance.
* Use the
TcpChannel in trusted server scenarios.
Formatters
* Use the
BinaryFormatter for optimized performance.
* Consider Web services before using the
SoapFormatter.
Marshal by Reference and Marshal by Value
* Use MBR (marshal by reference) when the object state should stay in the host application domain.
* Use MBR when you need to update data frequently on the server.
* Use MBR when the size of the object is prohibitively large.
* Use MBV (marshal by value) when you need to pass object state to the target application domain.
* Use MBV when you do not need to update data on the server.
* Use small MBV objects when you need to update data frequently on the server.
Serialization and Marshaling
* Consider using a data facade.
* Marshal data efficiently and prefer primitive types.
* Reduce serialized data by using
NonSerialized. * Prefer the
BinaryFormatter.
Return to
HomePage