我需要创建一个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是一种非常有效的资源受限设备加密算法。
一堆:)
发布于 2010-05-21 14:14:42
在C++、C#或VB中编写“托管”程序具有相同的性能,因为它们都编译为IL。
我不知道,但是如果您编写了一个非托管C++类库并从托管C#应用程序调用它,那么在p/invoke过程中您可能会失去一些性能,但是您的速度(从非托管的速度)可能足以证明它是合理的。p/invoke可能会取消从非管理中获得的任何潜在性能增益,这是平等的。
我认为,如果不进行测试和测试,就不会有确切的了解。
发布于 2010-05-21 14:39:10
实际上,您的托管代码将在第一次运行时编译,然后由操作系统缓存,因此没有必要担心它。
而且,无论您选择哪种语言,只要是.NET,它都将编译为CIL,并需要JIT编译。
如果您用C++编写简单的托管代码,这可能会更快,但不一定。
如Nate所说,P/Invoke可以减慢代码的速度。
您可以用托管代码或本机代码编写整个应用程序,但如果所有算法相同,唯一的性能差异将是(第一次)启动时间。这通常可以忽略不计。(对CLR进行了优化,以便非常非常快地完成JIT编译。)
附带注意:在JIT编译期间,CLR将优化您的代码。有时,JITted代码运行速度比普通本机代码快,这仅仅是因为JIT编译器优化得更好。
https://stackoverflow.com/questions/2882763
复制相似问题