小编Chr*_*ris的帖子

一个动态程序集中的多个类型比具有每个类型的多个动态程序集慢

所以我发布了一些动态代理DefineDynamicAssembly,在测试时我发现:

  • 每个动态程序集一种类型:快速,但使用大量内存
  • 一个动态程序集中的所有类型:非常非常慢,但使用的内存要少得多

在我的测试中,我生成10,000种类型,并且每类型的一种类型代码运行速度大约快8-10倍.内存使用情况完全符合我的预期,但是如何生成类型的时间要长得多?

编辑:添加了一些示例代码.

一个组装:

var an = new AssemblyName( "Foo" );
var ab = AppDomain.CurrentDomain.DefineDynamicAssembly( an, AssemblyBuilderAccess.Run );
var mb = ab.DefineDynamicModule( "Bar" );

for( int i = 0; i < 10000; i++ )
{                
    var tb = mb.DefineType( "Baz" + i.ToString( "000" ) );
    var met = tb.DefineMethod( "Qux", MethodAttributes.Public );
    met.SetReturnType( typeof( int ) );

    var ilg = met.GetILGenerator();
    ilg.Emit( OpCodes.Ldc_I4, 4711 );
    ilg.Emit( OpCodes.Ret );

    tb.CreateType();
}
Run Code Online (Sandbox Code Playgroud)

每种类型一个组件:

 for( int i = 0; …
Run Code Online (Sandbox Code Playgroud)

c# reflection.emit

19
推荐指数
2
解决办法
477
查看次数

解构模棱两可

我有一个带有两个解构方法的向量类,如下所示:

public readonly struct Vector2
{
    public readonly double X, Y;

    ...

    public void Deconstruct( out double x, out double y )
    {
        x = this.X;
        y = this.Y;
    }

    public void Deconstruct( out Vector2 unitVector, out double length )
    {
        length = this.Length;
        unitVector = this / length;
    }
}
Run Code Online (Sandbox Code Playgroud)

我在其他地方:

Vector2 foo = ...
(Vector2 dir, double len) = foo;
Run Code Online (Sandbox Code Playgroud)

这给了我:

CS0121: The call is ambiguous between the following methods or properties: 'Vector2.Deconstruct(out double, out double)' and 'Vector2.Deconstruct(out …
Run Code Online (Sandbox Code Playgroud)

c# c#-7.3

14
推荐指数
1
解决办法
296
查看次数

如何找到连接两个线段的弧?

我将从帮助我描述我的问题的 img 开始:

我有两个相连的线段 AB 和 BC (并且我知道坐标)。如何计算第一个和最后一个绿点之间的弧度。第一个和最后一个绿点位于距 B 点(黑色部分)指定距离的位置。我想要数组中所有绿点的坐标。任何人都可以帮助我解决这个问题吗?

math 2d

5
推荐指数
1
解决办法
2847
查看次数

在TextBox上处理KeyUp时发出沉默声

我正在使用它来允许光标前进到下TextBox一个WinForm:

private void GoToNextControl(object sender, KeyEventArgs e)
{
    if(e.KeyCode == Keys.Enter)
    {
        this.SelectNextControl((Control)sender, true, true, true, true);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果不按"输入"时的"叮"声,这可以完美地工作.我怎么能"沉默"丁?

.net c# winforms

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

从面板上删除所有按钮

我正在尝试从面板中删除所有按钮。不知何故,它只用我的代码删除了一半。我不知道为什么。这是在 c# windows 形式。有人可以解释一下吗。谢谢你。代码如下:添加使用

        for(int ii=1; ii<=6; ii++)
        {
            for(int jj=1; jj<=5; jj++)
            {
                Button b = new Button();
                b.TabStop = false;
                b.Width = 146;
                b.Height = 91;
                b.Click += new EventHandler(b_Click);
                panel.Controls.Add(b);
            }
        }
Run Code Online (Sandbox Code Playgroud)

删除使用

        foreach (Control c in panel.Controls)
        {
            c.Click -= new EventHandler(this.b_Click);
            panel.Controls.Remove(c);
            c.Dispose();
        }
Run Code Online (Sandbox Code Playgroud)

c# collections winforms

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

标签 统计

c# ×4

winforms ×2

.net ×1

2d ×1

c#-7.3 ×1

collections ×1

math ×1

reflection.emit ×1