最速でのアクセスVB6Stringクライアントまで、フルのC#
-
23-09-2019 - |
質問
を使用していvisual.って、VB6る文字列を返します約13000char.また実行電話純VB6で800ms実行しています。ましてそのまま実行により、c#とvisualで約8秒。っとの遅延を起こし、総力を結集.
ていただく場合正確約の総力を結集し、今までの感謝ればならインターネットには想像もつかないことはC#.例えばができ a)なバイト配列として b)をbyref string param、VB6層
と思いサンプルコードです。しを体験しました
Marshal.PtrToStringAuto(Marshal.ReadIntPtr(myCOMObject.GetString, 0)
近.
--
次にFranciのコメントとなります。私は単に参照で、VB6dll(プロセス)からC#dll.こちらの抽出物からOLEView
interface _MyCOMObect : IDispatch {
...
[id(0x60030006)]
HRESULT GetString(
[in] _IEventHistory* p_oEventHistory,
[out, retval] _IXML** );
...
};
[
uuid(09A06762-5322-4DC1-90DD-321D4EFC9C3E),
version(1.0),
custom({17093CC6-9BD2-11CF-AA4F-304BF89C0001}, "0")
]
coclass MyCOMObject {
[default] interface _CFactory;
};
[
odl,
uuid(C6E7413F-C63A-43E4-8B67-6AEAD132F5E5),
version(1.0),
hidden,
dual,
nonextensible,
oleautomation
]
Iべきなのは、ジャンムー-カシミールパラメータ(p_oEventHistory)は他のCOMオブジェクトにもスをインスタンス化クライアントまで、フルのC#で約80ms
S
解決
カップルのもの-
私のVB6はちょっと赤がおIDLを抜粋したものGetStringメソッドは、実際にはこのオブジェクトを実装するIXMLインターフェース。私が驚いたことを整理.PtrToStringAutoで使用頻度の高いものを取り揃えます。が変更すると、VB6かを返しまうタイプの文字列?
の効果COM+は潜在的に大きいです。まずいを比較するとタイミングのための最初の呼び出しに対しその後の呼び出し.COM+にスピンアップのホストプロセスにおVB6成分の初めての呼び出しの最初の呼び出しは常により痛い。注この初回呼び出しではなく、オブジェクトスインスタンス第二に、お部品で構成されCOM+に大きな差があまりにもを無効にしている場合はCOM+サービスのままでいることを実際に必要となど取引にかかることができるかもしれませ削除の論理の遮断とCOM+地するすべてのメソッド呼び出し.最終的には、必要がない場合は、サービスとCOM+、なります。
他のヒント
私はメモリマップされたファイルは、パイプををまたは名前付き使用を検討します。