7得票3回答
将C++ API暴露给C#

我有一个包含在*.dll中的C++ API,想要使用C#应用程序调用API中的方法。 目前,我已经创建了一个包含原生C++ API的C++/CLR项目,并成功创建了一个类似于以下代码的"桥接"类: // ManagedBridge.h #include <CoreAPI.h> ...

19得票8回答
Java的JVM和.NET的CLR的内部工作原理有什么区别?

Java的JVM和.NET的CLR在内部工作原理上有什么区别? 也许一个起点是,它们在各自的环境中(Java > JVM > 机器码)(C# > CLR > IL)基本上是相同的东西。 更新:有几个人提到了我试图涵盖的要点: 垃圾回收 装箱/拆箱 JIT调试 泛型/模板 欢迎提...

64得票3回答
性能:从通用类型派生的类型

我遇到了一个性能问题,但不太理解其中的原因。我知道如何修复它,但不明白为什么会出现这种情况。这只是为了好玩! 让我们来看代码。我尽可能简化了代码以重现此问题。 假设我们有一个通用类。它内部有一个空列表,并在构造函数中对T执行某些操作。它有一个Run方法,在该方法中调用列表上的IEnumerab...

10得票3回答
如何在崩溃转储文件中查看CLR版本?

我有一个来自.NET应用程序的 minidump 崩溃记录。是否有任何方法可以使用Windbg或其他工具知道故障机器(生成崩溃转储)的CLR版本(例如 mscorwks.dll 的版本)?

31得票5回答
如何在.NET虚拟机(CLR)中查看JIT编译代码

我如何跟踪JIT编译器生成的本地代码? 谢谢

143得票2回答
为什么C#中的堆栈大小恰好为1 MB?

今天的个人电脑虽然有大量的物理内存,但是C#的堆栈大小在32位进程中只有1 MB,在64位进程中为4 MB (C#中的堆栈容量)。 为什么CLR中的堆栈大小还是如此有限呢? 而且为什么正好是1 MB (4 MB)(而不是2 MB或512 KB)? 为什么决定使用这些数量? 我对这个决定背...

13得票5回答
为什么C# / CLR不支持方法重写的协变/逆变?

有很多关于绕过C#不允许方法返回(和参数)类型在重写时更改为兼容类型的限制的问题和答案,但是 为什么 要存在这种限制,无论是在C#编译器还是CLR中?据我所知,如果允许共变性/逆变性,没有任何可能会导致错误的情况,因此背后的原因是什么呢? 类似的问题也可以针对扩大访问参数进行提问-例如使用公...

44得票3回答
异步迭代器任务 IEnumerable<T>

我试图实现一个返回迭代器的异步函数。思路如下: private async Task&lt;IEnumerable&lt;char&gt;&gt; TestAsync(string testString) { foreach (char c in testStri...

14得票2回答
在继承类中重载方法

我开始明白我不明白正在发生什么。在C#中有以下行为:public class Base { public void Method(D a) { Console.WriteLine("public void Method(D a)"); } } publ...

18得票3回答
忽略ReflectionOnlyLoad期间缺失的依赖项。

我正在开发一个简单的类浏览器对话框,允许用户打开一个程序集并从中选择一个静态方法。然而,在某些情况下,程序集的依赖项可能会丢失。 由于我只需要方法名称而不是完整原型,那么是否有办法绕过调用Assembly.ReflectionOnlyLoadFrom时引发的FileNotFoundExcep...