Interop (.NET 1.1) Performance Checklist
From Guidance Share
Jump to navigationJump to search
J.D. Meier, Srinath Vasireddy, Ashish Babbar, Rico Mariani, and Alex Mackman
Design Considerations
- Design chunky interfaces to avoid round trips.
- Reduce round trips with a facade.
- Implement IDisposable if you hold unmanaged resources across client calls.
- Reduce or avoid the use of late binding and reflection.
Marshaling
- Explicitly name the target method you call.
- Use blittable types where possible.
- Avoid Unicode to ANSI conversions where possible.
- Use IntPtr for manual marshaling.
- Use [in] and [out] to avoid unnecessary marshaling.
- Avoid aggressive pinning of short-lived objects.
Marshal.ReleaseCOMObject
- Consider calling ReleaseComObject in server applications.
- Do not force garbage collections with GC.Collect.
Code Access Security (CAS)
- Consider using SuppressUnmanagedCode for performance-critical, trusted scenarios.
- Consider using TLBIMP /unsafe for performance-critical, trusted scenarios.
Threading
- Reduce or avoid cross-apartment calls.
- Use ASPCOMPAT when you call single-threaded apartment (STA) objects from ASP.NET.
- Use MTAThread when you call free-threaded objects.
- Avoid thread switches by using Neutral apartment COM components.
Monitoring Interop Performance
- Use performance counters for P/Invoke and COM interop.
- Use CLR Spy to identify interop problems.