繁体   English   中英

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

[英]C++ .NET DLL vs C# Managed Code ? (File Encrypting AES-128+XTS)

我需要创建一个Windows Mobile应用程序(WinMo 6.x - C#),用于加密/解密文件。 但是我有责任编写AES-128加密算法以及XTS作为操作模式。 RijndaelManaged只是不削减它:(比DES和3DES CryptoServiceProviders慢得多:O

我知道这完全取决于我以最有效的方式编写算法有多好。 (是的,我自己必须从头开始编写它,但我可以看看@其他实现)

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

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

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

Thanx一堆:)

实际上,您的托管代码将在第一次运行时进行JIT编译,然后由操作系统进行缓存,因此没有必要担心它。
此外,无论您选择哪种语言,只要它是.NET,它将编译为CIL并将需要JIT编译。
如果用C ++编写普通托管代码,可能会更快,但不一定。

正如Nate所说,P / Invoke会减慢您的代码速度。

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

附注:在JIT编译期间,CLR将优化您的代码。 有时,JITted代码比普通本机代码运行得更快,因为JIT编译器可以更好地进行优化。

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

我不知道,但如果你编写一个非托管C ++类库并从托管C#app调用它,你可能会在p / invoke期间失去一些性能,但你的速度提升(从非托管)可能足以证明它的合理性。 p / invoke有可能取消它从非托管中获得的任何潜在性能增益。

我不认为无论如何都不知道如何不做两种方式和测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM