【发布时间】:2016-05-02 09:35:17
【问题描述】:
我一直在尝试使用字符串调用方法,但副作用是每次按下按钮时都会创建一个新对象。我怎样才能摆脱这个?我试过使用 null,但没有运气。
第一次尝试:
string methodName = cboOriginal.Text + "To" + cboConverted.Text;
Type numeralType = typeof(NumeralSystemConversion);
ConstructorInfo numeralConstructor = numeralType.GetConstructor(Type.EmptyTypes);
object numeralObject = numeralConstructor.Invoke(new object[] { });
MethodInfo numeralMethod = numeralType.GetMethod(methodName);
object numeralValue = numeralMethod.Invoke(numeralObject, new object[] { txtOriginal.Text });
txtConverted.Text = numeralValue.ToString();
numeralType = null; numeralConstructor = null; numeralObject = null;
numeralMethod = null; numeralValue = null;
第二次尝试:
string methodName = cboOriginal.Text + "To" + cboConverted.Text;
convert = typeof(NumeralSystemConversion).GetMethod(methodName).Invoke(typeof(NumeralSystemConversion).GetConstructor(Type.EmptyTypes).Invoke(new object[] { }), new object[] { txtOriginal.Text });
txtConverted.Text = convert.ToString();
convert = null;
“convert”对象在应用启动时创建。而 NumeralSystemConversion 是我创建的一个类,方法所在的位置。
我看到的是,每次按下按钮时,诊断工具(Visual Studio 2015 社区)中的内存使用量都会增加。
【问题讨论】:
-
将语言添加到标签中。从代码中并不总是很明显。
-
你实际上是用这段代码创建了几个对象:一对
strings,一对object数组,可能还有一个隐含的StringBuilder来进行连接。 -
是的,我知道,这就是我想清理它的原因。
标签: c# object memory reflection