问题标签 [clr4.0]

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.

0 投票
1 回答
699 浏览

c# - 如何将 Finalize 与托管资源一起使用?

在B类的最后一个实例最终确定之前,我并不是 100% 清楚如何将A类的实例定义为存在。

或者换句话说,我希望所有B都在B最终确定中的A中调用 close&dispose 方法......并且在A本身最终确定之前发生这种情况。

场景:

A. 我有一个非托管资源的托管包装器。打个比方,我们称 A 为文件系统

B. 引用 A 的托管资源,这些资源又通过 A 包装器请求了非托管资源。对于一个类比,我们将 B 称为一个文件。

附加请求 --> 我希望 using 语法能很好地发挥作用。即显式调用 using dispose 不应释放非托管资源。该对象将存在于对象池中。它应该只在它离开对象池时被释放。

}

参考:

[1]为什么 Finalize 方法不允许覆盖

[2] CLR 通过 C Sharp 第三版。通道。21. 关键终结器对象。特别是第 537 页“使用托管资源完成”

0 投票
2 回答
1132 浏览

c# - LINQ 是否缓存计算值?

假设我有以下代码:

.NET 运行时实际上在这里做什么?它是每 100 次解析属性并将其转换为整数,还是足够聪明地确定它应该缓存解析的值而不是对范围内的每个元素重复计算?

此外,我将如何自己弄清楚这样的事情?

在此先感谢您的帮助。

0 投票
1 回答
253 浏览

c++ - IHostAssemblyStore::ProvideAssembly - 文件夹中程序集的实现

我试图弄清楚如何在托管 clr 托管方案中从与本机 .exe 文件不同的文件夹加载 AppDomainManager 程序集。

有没有人做过 IHostAssemblyStore::ProvideAssembly 实现,它将从文件夹加载 AppDomainManager 程序集,并希望共享它?

我是这个 WinApi/OLE/whatever 编程的新手,我不知道如何从 C++ 中的磁盘上的文件中获取 IStream*。

或者是否有另一种方法从任意文件夹加载 DefaultDomain 的 AppDomainManager?

0 投票
2 回答
1462 浏览

c# - 在同一个进程中加载​​的两个 .NET CLR 如何相互通信?

既然可以让两个 CLR 在同一个机器上运行,那么它们如何相互“对话”呢?

假设 GUI 在 .NET 2.0 CLR 下运行,并且有一个脚本在 .NET 4.0 CLR 上运行,例如,有没有办法从 4.0 环境修改基于 2.0 的 GUI?

当我使用这种技术将 .NET C# REPL 环境注入另一个 .net 进程时,我遇到了这个确切的问题:视频:将 C# DLL 注入托管 (C#) 和非托管 (C++) 进程


注意:我在 Reddit 上问过一个类似的问题,该版本包含大量参考资料,如果您对并行执行和 CLR 托管主题感兴趣,这将很有用

0 投票
3 回答
346 浏览

c# - 自动属性和通常声明的属性之间的性能差异。对或错?

从性能的角度来看,自动实现的属性和手动实现的属性之间有什么区别吗?

0 投票
1 回答
451 浏览

memory-management - .NET 4.0 中的 GC 不影响任务管理器中的工作集

好的,为了清楚起见,我知道任务管理器从来都不是监控程序内存消耗的好方法。现在我已经清除了空气...

我已经使用 SciTech 的 .Net 内存分析器有一段时间了,但几乎只在我们应用程序的 .Net 3.5 版本上使用。通常,我会运行一个操作,收集基线快照,再次运行该操作并收集比较快照并从那里攻击泄漏。一般来说,任务管理器会模仿记忆的上升和下降(在一定的准确度范围内和一定的时间段内)。

在我们的 .net 4.0 应用程序中,我们的测试部门在执行一组特定操作(我将其称为操作 A)时报告了内存。在分析器中,我会看到活动字节的相当大的变化(通常表示泄漏)。如果我立即收集另一个快照,则会回收内存(无论我等待收集初始比较快照多长时间)。我认为终结器可能会卡住,所以我手动注入了以下调用:

当我这样做时,我看不到分析器中的初始泄漏,但我在任务管理器中的工作集仍然高得离谱(操作 A 涉及加载图像)。我认为这个问题可能是一个卡住的终结器(当分析器收集它的快照时,SciTech 能够做一些巫术魔法),但是在我使用 WinDbg 和 MDbg 所花费的所有时间里,我找不到任何暗示终结器卡住了。如果我只是让我的应用程序坐几个小时,工作集中的内存将永远不会减少。但是,如果我继续执行其他操作,内存将在随机点大幅下降。

我的问题 我知道 GC 在 CLR 4.0 中发生了很大变化,但它是否影响操作系统查看分配内存的方式?我的电脑有 12 GB RAM,所以当我运行我的应用程序并增加内存使用时,我仍然有 TONS 空闲,所以我假设它只是不关心减少它已经分配的内容(如任务管理器中所述),即使内存已被“收集”。当我在具有 1GB RAM 的机器上运行相同的操作时,我从来没有遇到内存不足的异常,这表明我真的没有泄漏内存(这也是分析器所建议的)。

我关心任务管理器显示的唯一原因是因为我们的客户如何监控我们的内存使用情况。如果 GC 发生变化会影响到这一点,我只想向他们展示说明这是 Microsoft 的错,而不是我们的错的文档 :)

在我的尽职调查中,我搜索了一堆其他 SO 线程来寻找答案,但我发现的只是关于分代清理的并发性和其他不相关但有用的事实的文章。

0 投票
3 回答
1477 浏览

c# - CLR2 编译的 C# COM 不适用于 .Net 4

有谁知道为什么在 CLR2 (.Net 3.5) 下编译的 C# 创建的 COM 库在仅与 CLR4(.Net 4) 一起使用时不起作用?COM 的 CLR2 中的 CLR4 中缺少什么?

我们在 app.config 中使用适当的启动来让 C# 在 CLR4/.Net 4 下运行:

在尝试创建我们的 COM 接口之前,所有 C# 的东西都有效。它提供了以下例外:

无法加载运行时。(来自 HRESULT 的异常:0x80131700)

当我们尝试从 C++ 创建 COM 接口时,我们会遇到同样的问题。

一旦我们安装了 CLR2 (.Net 3.5),所有的 COM 东西都开始工作了。我们想知道发生了什么。

0 投票
1 回答
258 浏览

.net - CLR 程序集绑定

全部,

我对程序的程序集如何绑定到底层 CLR 版本几乎没有疑问。

1) 是否可以构建/运行引用 .net 4.0 程序集(使用 CLR 4.0)的 .net 2.0 应用程序?如果是这样,怎么做?

2) 我对 .net 框架的理解告诉我,在 .net 4.0 应用程序(即针对 CLR 4.0 构建)中引用 .net 2.0 程序集是可以的。在这种情况下,应用程序是在 CLR 4.0 下构建和运行的,但是当引用的程序集(在 .net 2.0/3.0/3.5 (CLR 2.0) 中构建)被加载并执行时会发生什么?应用程序现在是否加载 CLR 2.0?或者代码是否在旨在运行旧程序集的 CLR 4.0 下执行?

期待您的回复。随意详细说明。

0 投票
1 回答
615 浏览

c# - SQL 事务提交使连接处于损坏状态(c#)

简而言之: 在调用 transaction.Commit() 之后,下一个操作会失败,就好像事务没有提交一样。

更多细节: 我们有一个线程运行对数据库的写查询,其中一些被封装在一个事务中。一段时间后运行较重的负载时,我们遇到提交事务后的操作失败并显示错误指示事务正在进行中的情况,具体取决于提交后执行的操作,我们收到以下错误之一:

下一个操作是'开始交易:

...连接不支持并行事务...

下一个操作是插入/更新/删除

当分配给命令的连接处于挂起的本地事务中时,ExecuteNonQuery 要求该命令具有事务。该命令的 Transaction 属性尚未初始化。

通过调试器检查 Sql Connection 对象表明它包含一个“sqlInnerTransaction”对象,其父对象设置为 null。我们确实知道对“提交”的调用成功完成,没有出现错误。
运行 .net 4.0、SQL Server 2008 R2 SP2

0 投票
1 回答
541 浏览

c# - 使用 Spoon Studio .Net 4.0 构建的应用程序中带有 XmlSerializers 的 FileNotFoundException

我在使用 Spoon Studio 和 .Net 4.0 打包的虚拟化应用程序中遇到以下异常

这在我们使用 .Net 3.5 之前工作正常,但在迁移到 .Net 4.0 包后,我们开始看到此错误。

我知道解决这个问题的一种方法是预先生成 XmlSerializers,但在我们的例子中,我们有多个加载项也需要重建,我们希望避免这样做。

我的问题是为什么会发生这种情况?为什么运行时无法在运行时生成序列化程序?我可以看到在 temp 目录中生成了 .cs 和 .out 文件(dll 也暂时生成并立即删除)。

如果我在没有虚拟化的情况下运行我的应用程序,它可以正常工作并且能够构建和加载内存中的序列化程序。在这两种情况下,运行应用程序的用户都是相同的。

欢迎任何建议。

这是一个单独的问题,但我无法在 VS 或 windbg 中进行调试(我得到 clr version mismatch error b/w VS and Application)

原因是:在机器上安装 VS12/.Net 4.5 将 CLR 版本号升级到 4.0.30319.17929,而应用程序使用 4.0.30319.1。并且 VS 不允许我附加到这个应用程序