这种清除静态 int 的方法很慢。这是一种从类中删除所有整数值的创造性方法,但是当您引入要清除的所有其他对象类型时,这会变得更慢。
我的测试运行这个过程 50,000 次,所以本质上都不是“慢”,但相对而言你的方法是大约。比传统方法慢 700X。
static void Main(string[] args)
{
Stopwatch sw = Stopwatch.StartNew();
for (int i = 0; i < 50000; i++)
{
HasStaticObjects hso1 = new HasStaticObjects();
ClearAllStaticValues(hso1);
}
Console.WriteLine("Clear Generic Static Values: \n" + sw.Elapsed);
sw.Restart();
for (int i = 0; i < 50000; i++)
{
HasStaticObjects hso2 = new HasStaticObjects();
hso2.ClearStaticValues();
}
Console.WriteLine("Clear Static Values: \n" + sw.Elapsed);
Console.ReadLine();
}
public static void ClearAllStaticValues<T>(T currentClass)
{
var varList = currentClass.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Static).ToList();
varList.Where(x => x.FieldType == typeof(Int32)).ToList().ForEach(x => x.SetValue(null, 0));
varList.Where(x => x.FieldType == typeof(string)).ToList().ForEach(x => x.SetValue(null, ""));
}
}
class HasStaticObjects
{
private static int A, B, C;
private static string D, E, F;
public HasStaticObjects()
{
A = 1;
B = 2;
C = 3;
D = "Hi";
E = "Good";
F = "Fast";
}
public void ClearStaticValues()
{
A = 0;
B = 0;
C = 0;
D = "";
E = "";
F = "";
}
您需要接受的其他情况是当对象不包含整数或不包含字符串时,您的方法的性能将如何受到影响?
在测试中,从HasStaticObjects
类中删除 3 个字符串变量,您会看到即使不存在字符串,您的方法仍然需要时间来查找字符串。