首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++ .NET DLL与C#托管代码?(文件加密AES-128+XTS)

C++ .NET DLL与C#托管代码?(文件加密AES-128+XTS)
EN

Stack Overflow用户
提问于 2010-05-21 14:08:42
回答 2查看 1.7K关注 0票数 3

我需要创建一个Windows应用程序(WinMo 6.x - C#),它用于加密/解密文件。然而,我的职责是编写加密算法,即AES-128和XTS作为操作模式。RijndaelManaged只是没有剪切它:(比DES和3 DES CryptoServiceProviders :O慢得多)

我知道这一切都取决于我以最有效的方式编写算法的能力。(是的,我自己必须从头开始写,但我可以查看@其他实现)

然而,编写一个C++ .NET DLL来创建加密/解密算法+所有文件处理并从C#中使用它是否比在完全托管的C#代码中编写加密算法+文件处理具有显着的性能优势?

如果我使用C++ .NET创建加密算法,应该使用MFC设备DLL还是ATL?有什么不同,有什么影响,我选择哪一个?我是否可以从C++中添加一个对C# DLL的引用,或者是否应该使用P/Invoke?

我比C#更能胜任C++,但是性能起着重要的作用,因为我已经说服了我的讲师,AES是一种非常有效的资源受限设备加密算法。

一堆:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-21 14:14:42

在C++、C#或VB中编写“托管”程序具有相同的性能,因为它们都编译为IL。

我不知道,但是如果您编写了一个非托管C++类库并从托管C#应用程序调用它,那么在p/invoke过程中您可能会失去一些性能,但是您的速度(从非托管的速度)可能足以证明它是合理的。p/invoke可能会取消从非管理中获得的任何潜在性能增益,这是平等的。

我认为,如果不进行测试和测试,就不会有确切的了解。

票数 1
EN

Stack Overflow用户

发布于 2010-05-21 14:39:10

实际上,您的托管代码将在第一次运行时编译,然后由操作系统缓存,因此没有必要担心它。

而且,无论您选择哪种语言,只要是.NET,它都将编译为CIL,并需要JIT编译。

如果您用C++编写简单的托管代码,这可能会更快,但不一定。

如Nate所说,P/Invoke可以减慢代码的速度。

您可以用托管代码或本机代码编写整个应用程序,但如果所有算法相同,唯一的性能差异将是(第一次)启动时间。这通常可以忽略不计。(对CLR进行了优化,以便非常非常快地完成JIT编译。)

附带注意:在JIT编译期间,CLR将优化您的代码。有时,JITted代码运行速度比普通本机代码快,这仅仅是因为JIT编译器优化得更好。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2882763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档