我们公司在很大程度上依赖COM +组件来集中我们的DAL代码,并利用COM +处理事务和连接池的能力。当我们开始使用COM +时,它只是使用VB6 DLL并且总是通过后期绑定,因此我们可以利用托管在不同服务器上的DLL。
当我们在2005年开始转向.NET时,我们将DAL功能移植到.NET并继续使用COM +和后期绑定来托管组件。我们会像这样实例化对象:
objBalLauncher = CreateObject("NETBLL.Launcher", "\\" & strCOMPlusServerName)
我注意到CreateObject
似乎是针对ActiveX COM组件的,所以这让我想到了两件事:
CreateObject()
从.NET代码中后期绑定到程序集是否需要花费?这会强制您的代码跨越托管/非托管屏障与DLL通信吗?注意:虽然我有兴趣了解COM +的替代品(我现在肯定可以使用),但我最感兴趣的是听到我在COM +中使用托管DLL会产生什么样的费用。
答案 0 :(得分:4)
将托管的.NET组件托管为COM +对象确实需要将COM +调用从非托管COM +主机封送到COM对象的managend .NET实现,所以这是一些开销。
但是,如果您正在远程访问对象,那么标准COM编组和相关RPC的成本可能会掩盖COM互操作开销,因此它可能甚至不会影响您的等式。当然,COM对象,访问数据库,参与分布式事务等所做的实际工作可能使互操作开销相形见绌。
但是,当然,在一天结束时,您需要分析并确定潜在瓶颈的位置。我怀疑COM互操作会成为一个主要问题。