Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在c中创建类的对象时提高性能#_C#_Performance_Instantiation - Fatal编程技术网

C# 如何在c中创建类的对象时提高性能#

C# 如何在c中创建类的对象时提高性能#,c#,performance,instantiation,C#,Performance,Instantiation,我知道我将要问一个愚蠢的问题,但我只想知道以下陈述的区别: Abc object= new ABC(); object.Age=obj1.Age; object.Place=obj1.Place; object.Street=obj1.Street; object.Number=obj1.Number; object.POBox=obj1.POBox; 及 上述编写的代码是否有助于提高性能?我只是想知道,在创建一个类的对象并为该类对象赋值时,是否有任何方法可以提高性能?否。这些语句被编译为同一

我知道我将要问一个愚蠢的问题,但我只想知道以下陈述的区别:

Abc object= new ABC();
object.Age=obj1.Age;
object.Place=obj1.Place;
object.Street=obj1.Street;
object.Number=obj1.Number;
object.POBox=obj1.POBox;


上述编写的代码是否有助于提高性能?我只是想知道,在创建一个类的对象并为该类对象赋值时,是否有任何方法可以提高性能?

否。这些语句被编译为同一个IL,因此没有性能改进

第一个:

IL_0031: newobj instance void TestApplication.ABC::.ctor()
IL_0036: stloc.1
IL_0037: ldloc.1
IL_0038: ldc.i4.1
IL_0039: callvirt instance void TestApplication.ABC::set_Age(int32)
IL_003e: nop
IL_003f: ldloc.1
IL_0040: ldc.i4.1
IL_0041: callvirt instance void TestApplication.ABC::set_Place(int32)
IL_0046: nop
IL_0047: ldloc.1
IL_0048: ldc.i4.1
IL_0049: callvirt instance void TestApplication.ABC::set_Street(int32)
IL_004e: nop
IL_004f: ldloc.1
IL_0050: ldc.i4.1
IL_0051: callvirt instance void TestApplication.ABC::set_Number(int32)
IL_0056: nop
IL_0057: ldloc.1
IL_0058: ldc.i4.1
IL_0059: callvirt instance void TestApplication.ABC::set_POBox(int32)
第二个:

IL_0001: newobj instance void TestApplication.ABC::.ctor()
IL_0006: stloc.2
IL_0007: ldloc.2
IL_0008: ldc.i4.1
IL_0009: callvirt instance void TestApplication.ABC::set_Age(int32)
IL_000e: nop
IL_000f: ldloc.2
IL_0010: ldc.i4.1
IL_0011: callvirt instance void TestApplication.ABC::set_Place(int32)
IL_0016: nop
IL_0017: ldloc.2
IL_0018: ldc.i4.1
IL_0019: callvirt instance void TestApplication.ABC::set_Street(int32)
IL_001e: nop
IL_001f: ldloc.2
IL_0020: ldc.i4.1
IL_0021: callvirt instance void TestApplication.ABC::set_Number(int32)
IL_0026: nop
IL_0027: ldloc.2
IL_0028: ldc.i4.1
IL_0029: callvirt instance void TestApplication.ABC::set_POBox(int32)

不会。这些语句被编译为相同的IL,因此没有性能改进

第一个:

IL_0031: newobj instance void TestApplication.ABC::.ctor()
IL_0036: stloc.1
IL_0037: ldloc.1
IL_0038: ldc.i4.1
IL_0039: callvirt instance void TestApplication.ABC::set_Age(int32)
IL_003e: nop
IL_003f: ldloc.1
IL_0040: ldc.i4.1
IL_0041: callvirt instance void TestApplication.ABC::set_Place(int32)
IL_0046: nop
IL_0047: ldloc.1
IL_0048: ldc.i4.1
IL_0049: callvirt instance void TestApplication.ABC::set_Street(int32)
IL_004e: nop
IL_004f: ldloc.1
IL_0050: ldc.i4.1
IL_0051: callvirt instance void TestApplication.ABC::set_Number(int32)
IL_0056: nop
IL_0057: ldloc.1
IL_0058: ldc.i4.1
IL_0059: callvirt instance void TestApplication.ABC::set_POBox(int32)
第二个:

IL_0001: newobj instance void TestApplication.ABC::.ctor()
IL_0006: stloc.2
IL_0007: ldloc.2
IL_0008: ldc.i4.1
IL_0009: callvirt instance void TestApplication.ABC::set_Age(int32)
IL_000e: nop
IL_000f: ldloc.2
IL_0010: ldc.i4.1
IL_0011: callvirt instance void TestApplication.ABC::set_Place(int32)
IL_0016: nop
IL_0017: ldloc.2
IL_0018: ldc.i4.1
IL_0019: callvirt instance void TestApplication.ABC::set_Street(int32)
IL_001e: nop
IL_001f: ldloc.2
IL_0020: ldc.i4.1
IL_0021: callvirt instance void TestApplication.ABC::set_Number(int32)
IL_0026: nop
IL_0027: ldloc.2
IL_0028: ldc.i4.1
IL_0029: callvirt instance void TestApplication.ABC::set_POBox(int32)

我认为有一个微妙的区别:第二个语句是原子的;当没有合适的构造函数时,可以使用它来确保对象在正确的状态下初始化


mote info:

我认为有一个微妙的区别:第二个语句是原子的;当没有合适的构造函数时,可以使用它来确保对象在正确的状态下初始化


远程信息:

IL代码将相同。这只是语法。从技术上讲,这是一个编译器错误。只是说…@SimonWhitehead是的。Abc!=ABC和您不能声明一个
对象
“可能的重复”:想想看:如果其中一个更快,编译器可以轻松地将慢的转换为快的,因此它们仍然是完全相同的。IL代码将是相同的。这只是语法。从技术上讲,这是一个编译器错误。只是说…@SimonWhitehead是的。Abc!=ABC,你不能声明一个
对象
“可能的重复”:想想看:如果其中一个更快,编译器可以简单地将慢的转换为快的,所以它们仍然是完全一样的。