Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/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
.net 多个.ToUpper()的影响_.net_String_Memory - Fatal编程技术网

.net 多个.ToUpper()的影响

.net 多个.ToUpper()的影响,.net,string,memory,.net,String,Memory,这不是过早优化本身的问题。一般来说,在垃圾收集器和内存上,数百个ToUpper操作(其中许多操作可以复制)会对程序做什么,主要是关于字符串的不变性?每个.ToUpper调用都会创建一个新字符串。所以,额外的。偷听电话绝对是低效的。谨慎而专业的做法是尽量减少不必要和重复的.ToUpper呼叫 string Nacho = "cheesy" Nacho = Nacho.ToUpper() Nacho = Nacho.Trim().ToUpper() 。创建大量字符串垃圾 然而,如果这段代码不需要非

这不是过早优化本身的问题。一般来说,在垃圾收集器和内存上,数百个ToUpper操作(其中许多操作可以复制)会对程序做什么,主要是关于字符串的不变性?

每个.ToUpper调用都会创建一个新字符串。所以,额外的。偷听电话绝对是低效的。谨慎而专业的做法是尽量减少不必要和重复的.ToUpper呼叫

string Nacho = "cheesy"
Nacho = Nacho.ToUpper()
Nacho = Nacho.Trim().ToUpper()
。创建大量字符串垃圾

然而,如果这段代码不需要非常快,你也不需要太偏执。尽管这些孤立字符串中的每一个都需要进行垃圾收集,但这些本地小字符串几乎总是在GC的部分收集中被收集,并且内存会很快返回。确保在尽可能有限的范围内声明字符串,例如,在例程中而不是在类级别声明字符串。

每个.ToUpper调用都会创建一个新字符串。所以,额外的。偷听电话绝对是低效的。谨慎而专业的做法是尽量减少不必要和重复的.ToUpper呼叫

string Nacho = "cheesy"
Nacho = Nacho.ToUpper()
Nacho = Nacho.Trim().ToUpper()
。创建大量字符串垃圾


然而,如果这段代码不需要非常快,你也不需要太偏执。尽管这些孤立字符串中的每一个都需要进行垃圾收集,但这些本地小字符串几乎总是在GC的部分收集中被收集,并且内存会很快返回。确保在尽可能有限的范围内声明字符串,例如,在例程中而不是在类级别声明字符串。

?在大多数情况下几乎什么都没有,假设它们不是巨大的字符串,并且您有足够的内存。数亿可能会产生影响

基本上,每次调用都需要创建一个新字符串,我认为.NET不会检测到它已经是大写的


除非这是您正在做的大部分工作,否则我不会认为这是一个瓶颈,但分析将有助于验证这一点。

?在大多数情况下几乎什么都没有,假设它们不是巨大的字符串,并且您有足够的内存。数亿可能会产生影响

基本上,每次调用都需要创建一个新字符串,我认为.NET不会检测到它已经是大写的

除非这是您正在做的大部分工作,否则我不认为这是一个瓶颈-但分析将有助于验证这一点。

每次调用ToUpper都将创建一个新的字符串实例,即使内容与原始字符串相同,即使该字符串已经作为一个内部字符串文本存在

因此,数百个ToUpper调用的影响是您创建了数百个字符串实例。如果字符串很短,这不是问题,特别是如果您只在短时间内使用字符串。垃圾收集器可以有效地处理小型、寿命短的对象

例如:

// Interned string literals are the same instance:
string a = "asdf";
string b = "asdf";
Console.WriteLine(Object.ReferenceEquals(a, b)); // True

// ToUpper naturally creates a new instance if the content is changed:
string c = b.ToUpper();
Console.WriteLine(Object.ReferenceEquals(b, c)); // False

// ToUpper creates a new instance even if the content is unchanged:
string d = c.ToUpper();
Console.WriteLine(Object.ReferenceEquals(c, d)); // False

// ToUpper will not intern strings:
string e = "ASDF";
string f = e.ToUpper();
Console.WriteLine(Object.ReferenceEquals(e, f)); // False

// Dynamically created strings can be interned manually:
string g = String.Intern(f);
Console.WriteLine(Object.ReferenceEquals(e, g)); // True
对ToUpper的每次调用都将创建一个新的字符串实例,即使内容与原始字符串相同,即使该字符串已作为内部字符串文本存在

因此,数百个ToUpper调用的影响是您创建了数百个字符串实例。如果字符串很短,这不是问题,特别是如果您只在短时间内使用字符串。垃圾收集器可以有效地处理小型、寿命短的对象

例如:

// Interned string literals are the same instance:
string a = "asdf";
string b = "asdf";
Console.WriteLine(Object.ReferenceEquals(a, b)); // True

// ToUpper naturally creates a new instance if the content is changed:
string c = b.ToUpper();
Console.WriteLine(Object.ReferenceEquals(b, c)); // False

// ToUpper creates a new instance even if the content is unchanged:
string d = c.ToUpper();
Console.WriteLine(Object.ReferenceEquals(c, d)); // False

// ToUpper will not intern strings:
string e = "ASDF";
string f = e.ToUpper();
Console.WriteLine(Object.ReferenceEquals(e, f)); // False

// Dynamically created strings can be interned manually:
string g = String.Intern(f);
Console.WriteLine(Object.ReferenceEquals(e, g)); // True

您可能应该尝试使用ToUpper不变量,因为ToUpper对区域性敏感。您可能应该尝试使用ToUpper不变量,因为ToUpper对区域性敏感。