⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 csdn_文档中心_dcom概述(二).htm

📁 csdn10年中间经典帖子
💻 HTM
📖 第 1 页 / 共 3 页
字号:
			document.write(year);
			document.write(".");
			document.write(month);
			document.write(".");
			document.write(date);
			// -->
			</SCRIPT>
      </B>&nbsp;&nbsp;</TD></TR>
  <TR bgColor=#999999>
    <TD colSpan=3 height=1></TD></TR></TBODY></TABLE>
<TABLE border=0 width=770>
  <TBODY>
  <TR>
    <TD align=middle bgColor=#fafafa class=td1 vAlign=top width=150><BR>
      <SCRIPT src="CSDN_文档中心_DCOM概述(二).files/microsoft.js"></SCRIPT>
    </TD>
    <TD align=middle width=620>
      <TABLE bgColor=#eeeeee border=0 cellPadding=0 cellSpacing=0 width=600>
        <TBODY>
        <TR bgColor=#ffffff>
          <TD align=middle height=10 width=50></TD>
          <TD align=right><A href="http://www.csdn.net/">CSDN</A> - <A 
            href="http://www.csdn.net/develop/">文档中心</A> - <FONT 
            color=#003399>Visual C++</FONT>&nbsp;&nbsp;&nbsp;&nbsp; </TD></TR>
        <TR>
          <TD align=middle height=5></TD>
          <TD align=middle width=500></TD></TR>
        <TR>
          <TD align=middle bgColor=#003399 height=10><FONT 
            color=#ffffff>标题</FONT></TD>
          <TD><B>&nbsp;&nbsp;&nbsp;&nbsp;DCOM概述(二)</B>&nbsp;&nbsp;&nbsp;&nbsp;jiangtao(转贴) 
          </TD></TR>
        <TR>
          <TD align=middle height=5></TD>
          <TD align=middle width=500></TD></TR>
        <TR>
          <TD align=middle bgColor=#003399><FONT color=#ffffff>关键字</FONT></TD>
          <TD width=500>&nbsp;&nbsp;&nbsp;&nbsp;DCOM概述(二)</TD></TR>
        <TR>
          <TD align=middle height=5></TD>
          <TD align=middle width=500></TD></TR>
        <TR>
          <TD align=middle bgColor=#003399 height=10><FONT 
            color=#ffffff>出处</FONT></TD>
          <TD height=10>&nbsp;&nbsp;&nbsp;&nbsp;<A 
            href="http://www.jsinfo.net/nsfz/personal/pinxue/bcb/DCOM/DCOM.htm">http://www.jsinfo.net/nsfz/personal/pinxue/bcb/DCOM/DCOM.htm</A></TD></TR>
        <TR>
          <TD align=middle height=10></TD>
          <TD height=10></TD></TR></TBODY></TABLE><!--文章说明信息结束//-->
      <TABLE border=0 width=600>
        <TBODY>
        <TR>
          <TD align=left><BR><STRONG>&nbsp;</STRONG> 
            <H1>功能的发展:版本化 </H1>
            <P>除了随着用户的数量以及事务的数量而扩展规模外,当新的特性加入时应用系统也需要扩展规模。随着时间的推移,新的任务被添加进来,原有的任务被更新。传统的做法是或者客户进程和组件都需要同时被更新,或者旧的组件必须被保留直到所有的客户进程被更新,当大量的地理上分布的站点和用户在使用系统时,这就成为一个非常费力的管理问题。</P>
            <P>DCOM为组件和客户进程提供了灵活的扩展机制。使用COM和DCOM,客户进程能够动态地查询组件的机能。一个COM组件不是将其机能表现为一个简单、统一的方法和属性组,而是对于不同的客户进程表现为不同的形式。使用特定特性的客户进程只需要访问它所需要使用的方法和属性。客户进程也能够同时使用一个组件的多个特性。当新的特性加入组件时,它不会影响不涉及这些特性的老的客户进程。</P>
            <P>用这种方法来组织组件,使得我们能够有一种新的方法来发展组件功能:最初的组件表现为诸如COM界面的一套核心特性,这些特性是每个客户进程都需要使用的。当组件需要新的特性时,大多数(甚至是全部)的界面仍然是必须的,我们根本无须更改原来的界面就可以将新的功能和属性放到附加的界面中去。老的用户进程就好象什么事也没发生似的继续访问核心界面。新的客户进程既可以测试新的界面是否存在以便能使用它,也可以仍然只使用原来的界面。</P>
            <H2><IMG height=250 src="" width=397> </H2>
            <P><FONT size=3>图</FONT><FONT size=3>8 </FONT><FONT 
            size=3>健壮的版本发展</FONT></P>
            <H2></H2>
            <P>因为在DCOM编程模型中机能被分组放入界面中,你可以设计使用老的服务器程序的新的客户程序,也可以设计使用老的客户程序的新的服务器程序,或者将这些混合起来以便能够适合你的需求和编程资源。使用传统的对象模型时,那怕是对一个方法的细微改动都可能在根本上改变客户和组件之间的协议。在一些模型中,可以将方法加到方法队列的队尾,但是却不能在老的组件上测试新的方法。从网络发展的前景看来,这些事情将会变得越来越复杂:编码以及其它的一些功能典型地依赖于方法和参数的顺序。增加或改动方法和参数也会显著地改变网络协议。DCOM为对象模式和网络协议设计了一个简单、优雅和统一的方法来解决这些问题。</P>
            <P> </P><B>
            <H1>执行性能 </H1></B>
            <P>如果最初的执行性能不能让人满意的话,可扩展性就不会带来太多好处了。经常考虑到更多更好的硬件会使得应用向下发展是非常有益的,但是这些需求是怎样的呢?这些尖端扩展特性是否有用呢?是否对从COBOL到汇编这每一种语言的支持会危害到系统的执行性能呢?使组件能够在地球的另一面运行的能力是否妨碍了当它和客户在同一个进程中时的执行性能呢?</P>
            <P>在COM和DCOM中,客户并不能自己看到服务器,但是除非是在必要的情况下,否则客户进程决不会被系统组件将自己同服务器分开。这种透明性是通过一个简单的思想来实现的:客户进程同组件交互的唯一方式就是通过方法调用。客户进程从一个简单的方法地址表(一个“vtable”)中得到这些方法的地址。当客户进程想要调用一个组件中的某个方法时,它先得到方法的地址,然后调用它。在COM和DCOM模型中调用一个传统的C或汇编函数的唯一开支就是对方法地址的简单查询。如果组件是和客户运行在同一个线程中的过程中组件,那么无需调用任何COM或系统代码就可以直接找到方法的地址,COM仅仅只定义了找到方法地址表的标准。</P>
            <P>当用户和组件不是那么靠近──在另一个线程中,在另一个程序中或者在地球另一面的一台机器中时情况又是怎样的呢?COM将它的远程过程调用(RPC)框架代码放到vtable中,然后将每个方法调用打包放到一个标准的缓冲器结构中,这个缓冲器结构将被发送给组件,组件打开包并且重新运行最初的方法调用。从这方面来说,COM提供了一个面向对象的RPC机制。</P>
            <P>这种RPC机制的速度有多快呢?下面是需要考虑的不同的性能尺度:</P>
            <UL>
              <LI>一个“空”方法调用有多快? 
              <LI>“真正的”需要发送和接收数据的方法调用有多快? 
              <LI>在网络上转一圈有多快? </LI></UL>
            <P>下表显示了COM和DCOM的一些真实的执行性能参数,使我们能够对DCOM和其它的协议的相关的执行性能有一定的了解。</P>
            <TABLE border=1 borderColor=#000000 cellPadding=7 width=466>
              <TBODY>
              <TR>
                <TD width="39%"><B>
                  <H2>Parameter Size </H2></B></TD>
                <TD bgColor=#000000 colSpan=2 width="30%"><B>
                  <H2>4 bytes </H2></B></TD>
                <TD bgColor=#000000 colSpan=2 width="30%"><B>
                  <H2>50 bytes </H2></B></TD></TR>
              <TR>
                <TD width="39%"> </TD>
                <TD width="16%"><B><FONT size=1>
                  <P align=right>calls / sec </FONT></B></P></TD>
                <TD width="14%"><B><FONT size=1>
                  <P align=right>ms / call </FONT></B></P></TD>
                <TD width="16%"><B><FONT size=1>
                  <P align=right>calls / sec </FONT></B></P></TD>
                <TD width="14%"><B><FONT size=1>
                  <P align=right>ms / call </FONT></B></P></TD></TR>
              <TR>
                <TD width="39%">
                  <P><FONT size=3><B>"Pentium</B></FONT><FONT face=Helvetica 
                  size=1>&reg;</FONT><B><FONT size=3>,,” in-process</FONT></B> 
                </P></TD>
                <TD width="16%"><FONT size=3>
                  <P align=right>3,224,816 </FONT></P></TD>
                <TD width="14%"><FONT size=3>
                  <P align=right>0.00031 </FONT></P></TD>
                <TD width="16%"><FONT size=3>
                  <P align=right>3,277,973 </FONT></P></TD>
                <TD width="14%"><FONT size=3>
                  <P align=right>0.00031 </FONT></P></TD></TR>
              <TR>
                <TD width="39%">
                  <P><FONT size=3><B>"Alpha</B></FONT><FONT 
                  size=1>&#8482;</FONT><B><FONT size=3>," in-process</FONT></B> 
</P></TD>
                <TD width="16%"><FONT size=3>
                  <P align=right>2,801,630 </FONT></P></TD>
                <TD width="14%"><FONT size=3>
                  <P align=right>0.00036 </FONT></P></TD>
                <TD width="16%"><FONT size=3>
                  <P align=right>2,834,269 </FONT></P></TD>
                <TD width="14%"><FONT size=3>
                  <P align=right>0.00035 </FONT></P></TD></TR>
              <TR>
                <TD width="39%"><B><FONT size=3>
                  <P>"Pentium," cross-process </FONT></B></P></TD>
                <TD width="16%"><FONT size=3>
                  <P align=right>2,377 </FONT></P></TD>
                <TD width="14%"><FONT size=3>
                  <P align=right>0.42 </FONT></P></TD>
                <TD width="16%"><FONT size=3>
                  <P align=right>2,023 </FONT></P></TD>
                <TD width="14%"><FONT size=3>
                  <P align=right>0.49 </FONT></P></TD></TR>
              <TR>
                <TD width="39%"><B><FONT size=3>
                  <P>"Alpha," cross-process </FONT></B></P></TD>
                <TD width="16%"><FONT size=3>
                  <P align=right>1,925 </FONT></P></TD>
                <TD width="14%"><FONT size=3>
                  <P align=right>0.52 </FONT></P></TD>
                <TD width="16%"><FONT size=3>
                  <P align=right>1634 </FONT></P></TD>
                <TD width="14%"><FONT size=3>
                  <P align=right>0.61 </FONT></P></TD></TR>
              <TR>
                <TD width="39%"><B><FONT size=3>
                  <P>"Alpha," to Pentium remote </FONT></B></P></TD>
                <TD width="16%"><FONT size=3>
                  <P align=right>376 </FONT></P></TD>
                <TD width="14%"><FONT size=3>
                  <P align=right>2.7 </FONT></P></TD>
                <TD width="16%"><FONT size=3>
                  <P align=right>306 </FONT></P></TD>
                <TD width="14%"><FONT size=3>
                  <P align=right>3.27 </FONT></P></TD></TR></TBODY></TABLE>
            <P>开始两列表示一个“空”方法调用(发送和接收一个4字节长的整数)。最后两列可以认为是一个“真正的”COM方法调用(50字节长的参数)。</P>
            <P>此表显示了进程中组件是怎样得到零开支的执行性能的(第一排和第二排)。</P>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -