C#混合不安全/安全库

4
我正在逐渐建立一个代码库,以供多个应用程序使用。一些代码正在处理图像和预先存在的消息格式(从C++转换而来),因此需要使用不安全的代码。
有没有任何理由让我尽量不要在同一个库程序集中混合使用安全代码和不安全代码?
换句话说:我应该维护一个完全安全的库,并将不安全的代码收集到不同的库中吗?
我知道考虑“不安全”库的信任问题,但既然这些函数对我的大多数应用程序都至关重要,那么真的重要吗?不管是安全的还是不安全的,我的所有代码都会被信任,或者我的应用程序无法运行。难道我错了吗?

"所以需要不安全的代码",我并不那么确定。你会发现,通过一些创新思维,你几乎可以将旧的C++代码转换为安全的C#代码。 - Polity
True。另一方面,我有几个C/C++代码示例进行加密和数据格式化,我不想太多地改动它们。这些代码深度依赖指针处理,因此在转换为C#时,我必须进入不安全代码的领域以最小化修改移植。就我而言,我认为从内存流中读取字节数组是遍历内存中的数据的相当好的方法。 - Mathew Bollington
此外,当直接处理位图中的像素数据时,为了获得更好的性能,建议将像素数据放入BitmapInfo对象中,并通过不安全代码中的指针逐个遍历像素。无论如何,这是我目前拥有的代码。也许有一天我会找到时间以安全的方式重新实现它... - Mathew Bollington
请参见https://dev59.com/akzSa4cB1Zd3GeqPjhgN。 - Ohad Schneider
1个回答

4
在理论上,您可以开发安全的代码来满足您的需求,但假设您有使用不安全代码的充分理由 :)
在您运行不安全代码的部分,您可能会忘记释放内存等等...因此,如果您管理好内存,就不应该有问题。当您有一个使用COM+ dlls的C#项目时,您一直在这样做。在您的情况下,更好,因为您拥有所有的代码,所以如果能够检测到任何内存泄漏,您可以修复它。
如果您将所有不安全的代码收集到一个单独的库中 优点
  • 您可以在未来创建一个新的安全库
  • 如果您看到dll在执行日志中失败,您将能够更轻松地隔离问题的源头。
缺点
  • 如果您必须以不自然的方式分割安全/不安全的代码,则代码的可读性变差。
所以说实话,决定权在您手中。如果我是您,我会将不安全的代码拆分成一个不同的项目,以便在需要时用安全的代码替换它的能力。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接