所以我发布了一些动态代理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) 我有一个带有两个解构方法的向量类,如下所示:
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) 我将从帮助我描述我的问题的 img 开始:
我有两个相连的线段 AB 和 BC (并且我知道坐标)。如何计算第一个和最后一个绿点之间的弧度。第一个和最后一个绿点位于距 B 点(黑色部分)指定距离的位置。我想要数组中所有绿点的坐标。任何人都可以帮助我解决这个问题吗?
我正在使用它来允许光标前进到下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)
如果不按"输入"时的"叮"声,这可以完美地工作.我怎么能"沉默"丁?
我正在尝试从面板中删除所有按钮。不知何故,它只用我的代码删除了一半。我不知道为什么。这是在 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)