问题标签 [managed]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 什么是托管/非托管 .net 代码,它对我有什么影响?
我看到这里使用了相当多的术语托管和非托管。在线搜索我可以对它们有一个模糊的概念,但我真正需要知道的是它如何影响我作为 C# 桌面应用程序开发人员?我怎么知道我在任何时候都在处理什么,以及它如何改变我对该代码的处理方式?
复制
c# - 托管语言的 Judy 数组
Judy 数组是一种快速数据结构,可以表示一个稀疏数组或一组值。是否有针对 C# 等托管语言的实现?谢谢
unmanaged - 在混合 C++ .NET 应用程序中强调托管还是非托管?
我工作的应用程序是一个几乎完全用 Visual C++ 大约在 2003 年编写的 WinForms 应用程序。在我到达现场之前,由于 UI 构建框架而选择了 .NET,但绝大多数代码是在非托管领域开发的. 其中一部分是绝对必要的——我们对一些非常大的数据集进行一些实时图像处理,使用一些需要指向图像缓冲区的指针的英特尔图像处理库,我们确实在不到 1% 的情况下性能有那么重要吗?
该应用程序本身是一个大型可执行文件,通过将 UI 代码链接到几个静态库而形成,每个静态库都对应一个功能子系统——数据采集、图像处理等。自从我加入以来,我通过编写托管包装器将其中几个子系统拆分为 DLL,我们在其他应用程序中重用它们,但主应用程序仍然基本上由静态链接库组成。
我的同事和我在进一步发展应该强调非托管还是托管方面存在很大分歧。除了我提到的情况外,没有规定非托管代码的性能要求。我们坚定地致力于 .NET,因此跨平台不是问题。我认为除非另有规定,否则我们应该支持托管。
上个月,我的同事开发了一组管理子系统的类;他没有将它们实现为 ref 类并将一些事件添加到 .NET 接口,而是编写了几个 Observer 实现,使用 gcroot 来保存托管客户端的句柄,并允许自己留在非托管领域。这在我看来是错误的,只是因为为什么要写一些你可以免费拥有的东西?但我想知道我是否过于刻板。
有什么想法吗?
.net - 是否可以事后确定 .NET 程序集是用哪种语言编写的?
这最初是作为一种查找 C++/CLI 和托管 C++ 程序集的方法,以便可以测试它们内部的所有类,以确保重新实现所有继承的方法。我想将此添加为构建过程步骤,以确保它不再发生。
考虑到这个问题也让我有点好奇,因为能够确定使用的任何 .NET 语言会很有趣。因此,我走得更远,比较了所有 .NET 语言的程序集。到目前为止,这是我通过我编写的一个小程序发现的,它通过反射比较任何一组 .NET 程序集的类型和属性数据:
- C# - 有 AssemblyConfigurationAttribute,有 GuidAttribute
- VB - 有许多额外的“我的”类型(例如 MyApplication、MySettings),有 GuidAttibute
- F# - 有一个 FSharpInterfaceDataVersionAttribute,它还指定使用的编译器的版本。
- C++(除 /clr:safe 之外的所有) - 有一堆额外的类型(FrameInfo、type_info)
- C++ /clr:safe - 似乎没有独特的反射特性。
按此顺序解析可能是合理的:
- 如果它具有 FSharpInterfaceDataVersionAttribute,则为 F#
- 如果它在我发现的大量额外类型中有任何一个,那就是 C++。
- 如果它具有“My*”类型,则它是 VB。
- 如果它具有 AssemblyConfigurationAttribute 或 GuidAttribute,则为 C#
- 很可能是 C++ /clr:Safe
然而,由于这是一个可怕的 hack,我想在这里检查以确保没有其他选项可用。
multithreading - Windbg 堆栈跟踪问题
我正在调试托管代码的崩溃转储,当使用 !threads 在这里显示所有线程时,几个线程具有 Exception 字段值和各种异常。
我的问题是如何快速识别哪个异常是导致进程崩溃的根异常?为什么这么多线程与异常值相关联的任何想法 - 我认为应该只有一个线程(具有未处理的异常)导致进程崩溃,为什么这么多线程显示异常?:-)
提前谢谢,乔治
这是!threads 的一部分的输出示例,FooException 和 GooException 是我的应用程序定义的异常类型。
48 f 14c4 000000001d8bc4a0 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (0000000093365da0) 49 10 17e8 000000001acc26d0 200b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (0000000093364670) 50 11 135c 000000001acc3180 200b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (00000000dd707f70) 51 12 1740 000000001aca2ec0 200b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (00000000937e8a60) 52 13 814 000000001aca3970 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA GooException (000000009336c550) 53 14 6ac 000000001accb010 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (0000000093355f58) 54 15 1114 000000001accbac0 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA 56 16 d44 000000001accc570 200b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA GooException (00000000933c0598) 58 17 ff4 000000001accd020 200b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException ( 00000000a8a39c48) 59 18 780 000000001accdad0 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA 60 19 8fc 000000001acce580 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (00000000abd5ff08) 61 1a 2e8 000000001accf030 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (00000000ac163ea0) 62 1b 11e8 000000001d8bd010 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (0000000093367c78) 63 1c 1520 000000001d8bd5e0 200b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA 64 1d 1330 000000001d8be090 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException ( 00000000937d9540) 65 1e 7f8 000000001d8beb40 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (000000009339a038) 66 1f a70 000000001d8bf5f0 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (00000000937d8b88) 67 20 150 000000001d8c00a0 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA 68 21 1628 000000001d8c0b50 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (0000000093355200) 69 22 1148 000000001d8c1600 200b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA GooException (000000009380ada8) 70 23 16a8 000000001d8c20b0 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException ( 0000000093365178) 71 24 1640 000000001d8c2b60 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (0000000093343a78) 72 25 1568 000000001d8c3610 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (000000009380cc08)0000000000000000 0000000000162080 0 MTA FooException (0000000093355200) 69 22 1148 000000001d8c1600 200b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA GooException (000000009380ada8) 70 23 16a8 000000001d8c20b0 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (0000000093365178) 71 24 1640 000000001d8c2b60 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (0000000093343a78) 72 25 1568 000000001d8c3610 b020 已启用 0000000000000000:0000000000000000 0000000000162080 0 MTA Foo3008008 (000000cc09)0000000000000000 0000000000162080 0 MTA FooException (0000000093355200) 69 22 1148 000000001d8c1600 200b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA GooException (000000009380ada8) 70 23 16a8 000000001d8c20b0 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (0000000093365178) 71 24 1640 000000001d8c2b60 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (0000000093343a78) 72 25 1568 000000001d8c3610 b020 已启用 0000000000000000:0000000000000000 0000000000162080 0 MTA Foo3008008 (000000cc09)0000000000000000 0000000000162080 0 MTA GooException (000000009380ada8) 70 23 16a8 000000001d8c20b0 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (0000000093365178) 71 24 1640 000000001d8c2b60 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (0000000093343a78) 72 25 1568 000000001d8c3610 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (000000009380cc08)0000000000000000 0000000000162080 0 MTA GooException (000000009380ada8) 70 23 16a8 000000001d8c20b0 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (0000000093365178) 71 24 1640 000000001d8c2b60 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (0000000093343a78) 72 25 1568 000000001d8c3610 b020 Enabled 0000000000000000:0000000000000000 0000000000162080 0 MTA FooException (000000009380cc08)00000000000000000000000000000000000000162080 0 MTA FOOEXCEPTION(0000000093343A78)72 25 25 1568 000000001D8C3610 B020 B020启用000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162080CICCICTAFOO00000000000000000000000000000000000000162080 0 MTA FOOEXCEPTION(0000000093343A78)72 25 25 1568 000000001D8C3610 B020 B020启用000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162080CICCICTAFOO
c# - 从 C# 获取非托管 C++ 函数
我有一些权威的 ANSI 标准 C 代码。这意味着虽然我有源代码,但我不能翻译成另一种语言,也不能修改调用参数,因为这些操作会使权限失效。有超过 150 种功能。
我可以进行附带更改,例如将文件名从 .C 更改为 .CPP,以便使用 Visual Studio 2009 的 C++ 编译器进行编译,我已经这样做了。也可以添加编译器指令等。如有必要,我还可以通过包装层。
另一个限制是我的公司不希望我在任何 C# 代码中使用不安全的关键字。
我需要从 C# 程序中获取这些功能。
典型的 C/C++ 函数如下所示:
double SomeFunction(double a, double[3] vec, double[3][3] mat);
数组内容有时输入,有时输出,很少同时输入。
我首先尝试制作一个非托管 DLL(带有标记为 Extern C 的函数)。只有简单参数(int、double)的函数运行良好,但我无法确定如何编组数组。(其实我确实找到了一些示例代码,但是复制150次是极其复杂和不合理的。)
然后我在同一个解决方案中尝试了两个项目,一个在 C++ 中,另一个在 C# 中。在 C++ 项目中,我创建了一个托管函数,它只调用了标记为非托管的原始函数。这是非常干净和简单的,同样,简单的参数也很好用。但是对于数组,我找不到如何使参数类型在 C# 到 C++ 边界上匹配:(
Argument '2': cannot convert from 'double[]' to 'double*'
如上所述,我不能使用 unsafe 来获取指针)。
当然,我正在尝试做的事情必须是可能的。
获得这些功能的最佳方法是什么?
(使用上述函数的示例代码真的很酷。)
c# - How much of .NET is unmanaged?
Frequently when I am using the Reflector, I come across lots of unsafe code. Anyone knows how much of .NET is unmanaged/safe?
c# - C# 中的内存泄漏
当您确保所有句柄和实现的东西IDispose
都被释放时,托管系统中是否有可能泄漏内存?
会不会有一些变量被遗漏的情况?
c# - 什么可以让 .NET 应用程序冻结计算机?
我知道这可能是典型的“这取决于......”问题,但我会很感激任何关于从哪里开始寻找的指示。
我有一个通过以太网交谈的客户端/服务器应用程序。在一台计算机上,我运行服务器和一个客户端,而在另一台计算机上只运行客户端。一个运行Vista,一个运行XP。大约 3 周的正常运行时间后,整个计算机死机,没有任何工作,鼠标、键盘、没有任何东西 - 只是关闭电源。服务器每隔 10 秒发送一条 ping 消息以查看客户端是否处于活动状态,除此之外,每天只有几条小消息来回发送。
我正在尝试找出是我造成的还是其他原因。我已经开始了一个会话,几天后我想我会检查内存使用的奇怪增加,但除此之外我几乎没有什么想法。
sql-server-2005 - 如何强制 dbo 模式名称?
我在 VS 2008 中使用“SQL SERVER PROJECT”在 C# 中创建 UDF 然后我使用 DEPLOY 命令将 DLL 发布到 MS SQL Server 2005
除了所有创建的 UDF 都归我所有(作为用户)之外,所有工作都很好但我想保留 dbo 模式(例如:dbo.UDF_TEST - 不是 jonny.UDF_TEST)
知道如何管理 thar 吗?