标签: clr

解密.NET clr20r3异常参数P1..P10

我试图破解P1 ... P10参数的含义,clr20r3当我的应用程序遇到异常时,该参数与写入事件日志的参数相关联.

能找到的最好的是:

  • P1:托管过程(例如 w3wp.exe)
  • P2:托管流程版本(例如 6.0.3790.1830)
  • P3:??? (例如 42435be1)
  • P4:引发异常的程序集(例如 mrtables.webservice)
  • P5:装配版本(例如 2.1.2.0)
  • P6:??? (例如 4682617f)
  • P7:??? (例如 129)
  • P8:??? (例如 50)
  • P9:引发的异常类型(例如 system.argumentexception)
  • P10:??? (例如 NIL)

用于clr20r3的Google搜索提供了数千个样本参数值,有人可以尝试从中派生模式.

但我希望有关于参数含义的文档,而不是有根据的猜测.


编辑:虽然我可以希望规范文档,但我真的很高兴看到异常被抛出,在什么行,完成堆栈跟踪.

奖金阅读

.net clr exception

76
推荐指数
2
解决办法
3万
查看次数

.NET Core中没有AppDomains!为什么?

微软是否有理由选择不支持.NET Core中的AppDomains?

AppDomains在构建长时间运行的服务器应用程序时特别有用,我们可能希望更新服务器加载的程序集是一种优雅的方式,而无需关闭服务器.

如果没有AppDomains,我们如何在长时间运行的服务器进程中替换我们的程序集?

AppDomains还为我们提供了一种隔离服务器代码不同部分的方法.比如,自定义websocket服务器可以在主appdomain中具有套接字代码,而我们的服务在辅助appdomain中运行.

如果没有AppDomains,则无法使用上述方案.

我可以看到一个论点,可能会讨论使用VM的云概念来处理程序集更改而不必承担AppDomains的开销.但这是微软的想法或说法吗?或者他们有针对上述情况的具体原因和替代方案?

.net clr appdomain .net-core

72
推荐指数
6
解决办法
2万
查看次数

为什么检查这个!= null?

偶尔我喜欢花一些时间查看.NET代码,看看事情是如何在幕后实现的.我在String.Equals通过Reflector 查看方法时偶然发现了这个宝石.

C#

[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public override bool Equals(object obj)
{
    string strB = obj as string;
    if ((strB == null) && (this != null))
    {
        return false;
    }
    return EqualsHelper(this, strB);
}
Run Code Online (Sandbox Code Playgroud)

IL

.method public hidebysig virtual instance bool Equals(object obj) cil managed
{
    .custom instance void System.Runtime.ConstrainedExecution.ReliabilityContractAttribute::.ctor(valuetype System.Runtime.ConstrainedExecution.Consistency, valuetype System.Runtime.ConstrainedExecution.Cer) = { int32(3) int32(1) }
    .maxstack 2
    .locals init (
        [0] string str)
    L_0000: ldarg.1 
    L_0001: isinst string
    L_0006: stloc.0 
    L_0007: ldloc.0 
    L_0008: brtrue.s L_000f
    L_000a: …
Run Code Online (Sandbox Code Playgroud)

.net c# clr reflector

71
推荐指数
3
解决办法
7636
查看次数

自动创建空的C#事件处理程序

无法在没有附加处理程序的C#中触发事件.因此,在每次调用之前,有必要检查事件是否为空.

if ( MyEvent != null ) {
  MyEvent( param1, param2 );
}
Run Code Online (Sandbox Code Playgroud)

我想保持我的代码尽可能干净,并摆脱那些空检查.我不认为这会影响性能,至少在我的情况下不会.

MyEvent( param1, param2 );
Run Code Online (Sandbox Code Playgroud)

现在我通过手动为每个事件添加一个空的内联处理程序来解决这个问题.这很容易出错,因为我需要记住这样做等等.

void Initialize() {
  MyEvent += new MyEvent( (p1,p2) => { } );
}
Run Code Online (Sandbox Code Playgroud)

有没有办法使用反射和一些CLR魔法自动为给定类的所有事件生成空处理程序?

c# clr events delegates

68
推荐指数
5
解决办法
5万
查看次数

如何决定是否将ATL,MFC,Win32或CLR用于新的C++项目?

我刚刚开始我的第一个C++项目.我正在使用Visual Studio 2008.它是一个单一窗体的Windows应用程序,可以访问几个数据库并启动WebSphere MQ事务.我基本上理解ATL,MFC,Win32(实际上我对它有点模糊)和CLR之间的差异,但我对如何选择感到茫然.

这些中的一个或多个是为了向后兼容吗?

CLR 是个坏主意吗?

任何建议赞赏.

编辑: 我为这个项目选择了C++,原因是我没有在帖子中介绍,这些并不完全是技术性的.所以,假设 C++是唯一/最佳选择,我应该选择哪个?

c++ clr winapi mfc atl

68
推荐指数
4
解决办法
5万
查看次数

我们是否应该始终在类中包含默认构造函数?

我被同事问过这个问题,我们是否应该在类中包含默认构造函数?如果是这样,为什么?如果不是,为什么不呢?

public class Foo {

    Foo() { }

    Foo(int x, int y) {
        ...
    } 

}
Run Code Online (Sandbox Code Playgroud)

我也有兴趣从专家那里了解一下.

.net c# clr default-constructor

67
推荐指数
4
解决办法
5万
查看次数

为什么C#不允许像C++这样的非成员函数

C#将不允许编写非成员函数,并且每个方法都应该是类的一部分.我认为这是所有CLI语言的限制.但我错了,我发现C++/CLI支持非成员函数.编译时,编译器会将该方法作为某个未命名类的成员.

这是C++/CLI标准所说的,

[注意:CLI将非成员函数视为某些未命名类的成员; 但是,在C++/CLI源代码中,此类函数无法使用该类名显式限定.结束说明]

未指定元数据中非成员函数的编码.[注意:这不会导致互操作问题,因为此类功能无法获得公共可见性.结束说明]

所以我的问题是为什么C#不实现这样的东西?或者你认为不应该有非成员函数,每个方法应该属于某个类?

我的意见是拥有非成员函数支持,它有助于避免污染类的接口.

有什么想法吗..?

.net c# clr c++-cli function

65
推荐指数
4
解决办法
2万
查看次数

C#方法可以定义为采用的最大参数数量是多少?

我试图找出C#中方法可以具有的最大参数数量.我已经到处检查了答案,包括C#官方文档,MSDN和一些CLR参考,我找不到答案.有没有人对这个问题有答案?

.net c# clr

63
推荐指数
2
解决办法
1万
查看次数

性能:派生自通用的类型

我遇到过一个我无法理解的性能问题.我知道如何解决它,但我不明白为什么会这样.这只是为了好玩!
我们来谈谈代码.我尽可能地简化了代码以重现问题.
假设我们有一个泛型类.它内部有一个空列表,并T在构造函数中执行某些操作.它具有Run调用IEnumerable<T>列表上的方法的方法,例如Any().

public class BaseClass<T>
{
    private List<T> _list = new List<T>();

    public BaseClass()
    {
        Enumerable.Empty<T>();
        // or Enumerable.Repeat(new T(), 10);
        // or even new T();
        // or foreach (var item in _list) {}
    }

    public void Run()
    {
        for (var i = 0; i < 8000000; i++)
        {
            if (_list.Any())
            // or if (_list.Count() > 0)
            // or if (_list.FirstOrDefault() != null)
            // or if (_list.SingleOrDefault() != null)
            // or …
Run Code Online (Sandbox Code Playgroud)

.net c# generics clr performance

63
推荐指数
1
解决办法
1875
查看次数

根源是什么?

垃圾收集的根源是什么?

我已经将root的定义读作"你编程可以访问的任何引用",而live的定义是正在使用的对象,它可以是局部变量,静态变量.

我对区分root和live对象之间的区别感到困惑.

什么是root的路径?root和live对象如何工作?

有人可以详细说明吗?

.net clr garbage-collection jvm gc-roots

62
推荐指数
4
解决办法
2万
查看次数