【问题标题】:How do I make a whole C# application "unsafe"?如何使整个 C# 应用程序“不安全”?
【发布时间】:2017-03-12 13:18:37
【问题描述】:

所以,我喜欢 C# 语言,以及自动 getter、setter 等,但我想利用它来自己完成大部分工作。很多语法是我想使用 C# 而不是吸收它并选择 C++ 备份的具体原因(这在此处并非完全不可能)。

我的目标是使用 SDL、GDI+、DirectX 或类似性质的东西来从头开始创建我自己的所有 Windows like this,但使用 C#。我对使用 P\Invoke、进行自己的内存管理等非常满意。

那么,有没有办法将整个应用程序标记为不安全,以便我可以自己进行内存管理?

【问题讨论】:

  • 相关:stackoverflow.com/a/3074443/1870760。请注意,不安全不会停止垃圾收集。
  • 悲伤的脸。我不太关心垃圾收集,但我当然希望能够在需要时调用本机 C++ 代码并进行内存管理。但是,我上次尝试时,析构函数使我的类自动开始丢失值。
  • 也许这是一个 X/Y 问题,而 GC 并没有弄乱你的东西。你到底遇到了什么问题?
  • stackoverflow.com/questions/41274807/losing-argument-value 这是我在使用垃圾收集器时遇到的问题。基本上,当我从类中删除析构函数时,它就可以毫无问题地开始工作了。
  • 关于 X/Y 问题的相关说明,我的问题是我喜欢 C# 中的一些语法,例如 foreach,但我希望 C++ 控制我的应用程序。所以几个月来我一直在精神上挣扎,因为我喜欢 C# 的易用性,但也喜欢 C++ 的控制能力,因此我努力尝试将 C# 用作一种“低级”语言,试图获得垃圾收藏家走开。

标签: c#


【解决方案1】:

您不能自己进行内存管理。您可以使用像 Mono 这样的开源框架并编写自己的垃圾收集器。但是你不太可能重新发明一个更好的轮子。

unsafe 并不意味着您可以覆盖默认内存管理。这意味着允许指针操作。您仍在托管内存中,无法控制对象的创建或销毁。

【讨论】:

  • 我并不太担心垃圾收集是个问题,但访问指针的能力非常吸引人。另外,请投赞成票,因为您似乎已经纠正了我对 unsafe 所做的严重误解。我的印象是unsafe 告诉 GC 不要插手类/代码。
  • 在我用 C# 开发的所有时间里,我从来不需要指针操作。
  • 即使在使用 PInvoke 访问 C++ 编写的 DLL 时?
  • @JonathanSchmold 有 IntPtr 。
猜你喜欢
  • 2020-10-08
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多