高分严肃讨论:用COM还是用.Net? 我想作一个中间层封装一些事务逻辑,要求实现进程隔离,觉得用COM最合适了。但是近期微软的.Net退出后,是不是有比COM跟佳的解决方案?由于对.Net不太精通,请高手们谈谈你们的看法。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 从性能上,你最好还是用COM 请问楼上的兄台,.Net怎么写出隔离进程的服务器程序,例如用C#?我用C#创建工程时,如果选择服务,则只有Windows Service/ASP.Net Web Service。ASP.Net Web Service太松散,Windows Service又太底层,难道要我自己写Socket或者管道?也许是我.Net知识有限,请高手指点。 我觉得我会使用COM+,一方面我对.net不是很精通,另一方面使用COM可以得到更高的效率,而且我比较喜欢底层的东西 :P 如果想在.NET和COM环境中都能使用,最好用COM开发。.NET中有对COM组建的映射功能,可以使用COM对象。(我不知道在COM中能不能使用.NET组件) 我写了一个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倍。这个问题让我头疼不以,是哪里出问题了?谢谢! 还是用.NET吧。.NET能很好的支持COM、COM+ 但.Net好像没法作一个跨进程的服务平台吧?比如我要在内存中长期维持一个链表,并且可以让别的进程访问到,怎么样实现? to golden_alvin,对于跨进程边界调用的程序,COM服务和Socket服务,哪个效率高? To zhg_best2000,这是一个接口效率问题。函数调用的时间分为两个部分,接口时间和函数运行时间。使用ASP会增加接口时间,但不会增加函数本身的运行时间。由于你的测试函数,接口时间占总时间的比例较大,所以使用ASP调用时会出现你所说的问题。 我想了还是用别的方法。我原来的目的有三:1)作一套高效率、高安全性的底层数据库隔离平台;2)以某种服务进程的方式为其他进程维护一套高速的数据结构访问Cache;3)在一定程度上可以防止代码被反编译;我排除使用.Net Framework,是因为他们的目标代码太容易反编译。现在想排除COM,是因为它还是不合适处理高密度交互式的c/s会话。大家有没有好的想法?没有,就揭帖啦。 还是用com/com+吧。因为.net的核心之一是web services,但目前并不是很成熟。 我也觉得COM是一个很好的方案 学习,我对.net不熟,感觉.net能够很好的支持各种组件,它能做中间层吗? 2003版的.net会不会好一些呢,不过还是com顺手 感谢大家的参与,以下是我这几天作的试验:(一)性能比较循环10万次,访问某个函数。<试验一>标题:API方式的调用效率试验方法:在 C# WinAPP / C#ASP.Net / Delphi调用,并比较与C# / Delphi 语言内部调用上的性能差异。试验内容:用MFC写DLL,并导出DFSessionGetUsername()函数让下列语言调用。试验数据:(用BSTR方式传送)C# WinAPP C#.NET 老ASP Delphi C# Language Delphi Language300 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 Language310 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 Language13500 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 COM54请求/s 220请求/s 216请求/s另外――如果EXE COM方式中,把循环此时从20减少到5,速度提高到62.5请求/s还是循环20次,但如果打印内容比较多(7660 Bytes),速度有所下降:EXE COM DLL COM ADODB COM50请求/s 168请求/s 164请求/s 我现在想出来的架构是:[.Net外围应用]<----- [DLL COM] <----- [EXE COM] <----- [Database]其中:[DLL COM]可以是[EXE COM]的高速缓冲以及前处理、后处理器。[EXE COM]是负责处理跨进程提供核心服务。[Database]是[EXE COM]的数据序列化存储器。就这些了,大家提点建议吧? Directx实例学习群!一步一步的来,学习交流! 问个数据结构的问题 控制台中使用CString等类的头文件包含问题! 《新手求救》能不能在treectrl中同时选择多个节点?? 我是新手帮我一下吧,帅哥们!谢谢。 谁有现成的Unicode与UTF-8的Windows互转换程序,急需 在VC中怎么做一个包含界面的DLL呢? 关于VC修改VB窗体背景的问题,请关注 几个img文件,用ghost打不开 怎样构造多行的CString 对象? 高分挑战界面高手的问题:关于ListView,真正的难题? 怎样才能在客户端快速接收到jpg图像并显示出来(30/秒)
我用C#创建工程时,如果选择服务,则只有Windows Service/ASP.Net Web Service。ASP.Net Web Service太松散,Windows Service又太底层,难道要我自己写Socket或者管道?
也许是我.Net知识有限,请高手指点。
1)作一套高效率、高安全性的底层数据库隔离平台;
2)以某种服务进程的方式为其他进程维护一套高速的数据结构访问Cache;
3)在一定程度上可以防止代码被反编译;我排除使用.Net Framework,是因为他们的目标代码太容易反编译。
现在想排除COM,是因为它还是不合适处理高密度交互式的c/s会话。大家有没有好的想法?没有,就揭帖啦。
(一)性能比较
循环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
[DLL COM]可以是[EXE COM]的高速缓冲以及前处理、后处理器。
[EXE COM]是负责处理跨进程提供核心服务。
[Database]是[EXE COM]的数据序列化存储器。就这些了,大家提点建议吧?