我想作一个中间层封装一些事务逻辑,要求实现进程隔离,觉得用COM最合适了。但是近期微软的.Net退出后,是不是有比COM跟佳的解决方案?由于对.Net不太精通,请高手们谈谈你们的看法。

解决方案 »

  1.   

    从性能上,你最好还是用COM
      

  2.   

    请问楼上的兄台,.Net怎么写出隔离进程的服务器程序,例如用C#?
    我用C#创建工程时,如果选择服务,则只有Windows Service/ASP.Net Web Service。ASP.Net Web Service太松散,Windows Service又太底层,难道要我自己写Socket或者管道?
    也许是我.Net知识有限,请高手指点。
      

  3.   

    我觉得我会使用COM+,一方面我对.net不是很精通,另一方面使用COM可以得到更高的效率,而且我比较喜欢底层的东西 :P
      

  4.   

    如果想在.NET和COM环境中都能使用,最好用COM开发。.NET中有对COM组建的映射功能,可以使用COM对象。(我不知道在COM中能不能使用.NET组件)
      

  5.   

    我写了一个DLL型的COM组件给VC#.Net调用,方法是在VC# 把这个组件Add Reference 到工程中,编译后与目标文件同一目录下会自动生成一个.Net对COM控件封装的DLL。我想.Net Framework是通过此DLL去调用COM的。我在用C#写的Windows Application应用程序模式下调用此COM组件,执行一个10万次的循环只要120毫秒,但同样代码移到ASP.Net应用程序模式下却慢了50倍,达到5600多毫秒。我试着导入微软自己的控件,比如ADODB,速度只慢了2.5倍。这个问题让我头疼不以,是哪里出问题了?谢谢!
      

  6.   

    还是用.NET吧。.NET能很好的支持COM、COM+
      

  7.   

    但.Net好像没法作一个跨进程的服务平台吧?比如我要在内存中长期维持一个链表,并且可以让别的进程访问到,怎么样实现?
      

  8.   

    to golden_alvin,对于跨进程边界调用的程序,COM服务和Socket服务,哪个效率高?
      

  9.   

    To zhg_best2000,这是一个接口效率问题。函数调用的时间分为两个部分,接口时间和函数运行时间。使用ASP会增加接口时间,但不会增加函数本身的运行时间。由于你的测试函数,接口时间占总时间的比例较大,所以使用ASP调用时会出现你所说的问题。
      

  10.   

    我想了还是用别的方法。我原来的目的有三:
    1)作一套高效率、高安全性的底层数据库隔离平台;
    2)以某种服务进程的方式为其他进程维护一套高速的数据结构访问Cache;
    3)在一定程度上可以防止代码被反编译;我排除使用.Net Framework,是因为他们的目标代码太容易反编译。
    现在想排除COM,是因为它还是不合适处理高密度交互式的c/s会话。大家有没有好的想法?没有,就揭帖啦。
      

  11.   

    还是用com/com+吧。因为.net的核心之一是web services,但目前并不是很成熟。
      

  12.   

    我也觉得COM是一个很好的方案
      

  13.   

    学习,我对.net不熟,感觉.net能够很好的支持各种组件,它能做中间层吗?
      

  14.   

    2003版的.net会不会好一些呢,不过还是com顺手
      

  15.   

    感谢大家的参与,以下是我这几天作的试验:
    (一)性能比较
    循环10万次,访问某个函数。<试验一>标题:API方式的调用效率
    试验方法:在 C# WinAPP / C#ASP.Net / Delphi调用,并比较与C# / Delphi 语言内部调用上的性能差异。
    试验内容:用MFC写DLL,并导出DFSessionGetUsername()函数让下列语言调用。
    试验数据:(用BSTR方式传送)
    C#  WinAPP C#.NET 老ASP Delphi C# Language Delphi Language
    300 ms          380 ms -- 225 ms 115 ms          245 ms
    <试验二>标题:DLL COM方式的调用效率
    试验方法:在 C# WinAPP / C#ASP.Net / Delphi调用,并比较与C# / Delphi 语言内部调用上的性能差异。
    试验内容:用MFC写DLL,并导出DFSession.Username属性让下列语言调用。
    试验数据:
    C# WinAPP C#.NET 老ASP Delphi C# Language Delphi Language
    310 ms 440 490 ms 415 ms 115 ms          245 ms
    另外――
    在C#.NET ASP兼容模式下 450 ms;
    在VB.NET ASP兼容模式下1235 ms;
    在VB.NET模式下 420 ms;<实验三>标题:EXE COM方式的调用效率
    试验方法:在 C# WinAPP / C#ASP.Net / Delphi调用,并比较与C# / Delphi 语言内部调用上的性能差异。
    试验内容:用MFC写DLL,并导出DFSession.Username属性让下列语言调用。
    试验数据:
    C# WinAPP   C#.NET 老ASP Delphi C# Language Delphi Language
    13500 ms   12950   ms 70000 ms 12015 ms ―― ――
    <试验四>标题:在C#.Net中测试调用效率,在初始化操作中分别调用20次
    试验方法:在 C#.Net分别调用 EXE COM、DLL COM、ADODB COM,比较性能差异。
    试验内容:用MFC写DLL/EXE COM,并导出DFSession.Username属性让下列语言调用。
    试验数据:
    EXE COM DLL COM ADODB COM
    54请求/s 220请求/s 216请求/s
    另外――
    如果EXE COM方式中,把循环此时从20减少到5,速度提高到62.5请求/s
    还是循环20次,但如果打印内容比较多(7660 Bytes),速度有所下降:
    EXE COM DLL COM ADODB COM
    50请求/s 168请求/s 164请求/s
      

  16.   

    我现在想出来的架构是:[.Net外围应用]<----- [DLL COM] <----- [EXE COM] <----- [Database]其中:
    [DLL COM]可以是[EXE COM]的高速缓冲以及前处理、后处理器。
    [EXE COM]是负责处理跨进程提供核心服务。
    [Database]是[EXE COM]的数据序列化存储器。就这些了,大家提点建议吧?