Performance Results for ThreadingModel=“Apartment”
This section captures the performance results when the ThreadingModel of CLSID_Details is ThreadingModel="Apartment". To make the discussion easier, concentrate on the VoidCall column in each table. In Table B-4, note the following:
For in-process method invocations, the client and the server share the same apartment. This implies that method calls are made directly, without marshaling.
From the data shown in Table B-4, a direct method call is about 170 times more efficient than a local out-of-process method invocation. It is about 1800 times more efficient than a remote out-of-process method invocation.
For Table B-5 and Table B-6, note the following:
The client apartment is different from the server apartment. This implies that marshaling will result.
For all in-process method invocations, the client apartment marshals interface pointers between itself and a different apartment, a different STA.
In-process and local out-of-process method invocations are essentially equivalent, when the client and server exist in different apartments.
Table B-4. Client Apartment: STA (Secondary STA Thread)
FirstCall | VoidCall | ArrayCall | LongCall | |
|---|---|---|---|---|
In-process | 0.000005 | 0.000006 | 0.000005 | 0.000007 |
Local | 0.000812 | 0.000172 | 0.000183 | 0.001776 |
Remote | 0.039747 | 0.001798 | 0.002399 | 0.017383 |
Table B-5. Client Apartment: MTA (MTAThread1)
FirstCall | VoidCall | ArrayCall | LongCall | |
|---|---|---|---|---|
In-process | 0.000103 | 0.000094 | 0.000103 | 0.000808 |
Local | 0.000612 | 0.000091 | 0.000099 | 0.000795 |
Remote | 0.037605 | 0.001695 | 0.001885 | 0.016981 |
Table B-6. Client ...