Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > .NET Framework > Forum > String.Empty กับ string.Empty ดีกว่า “” จริงหรือเปล่า?



 

String.Empty กับ string.Empty ดีกว่า “” จริงหรือเปล่า?

 



Topic : 046096



โพสกระทู้ ( 3,144 )
บทความ ( 1 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์




ที่มา http://www.ekkapop.com/string-empty-vs-double-quote/ (แต่ตอนนี้เหลืออยู่แค่ในแคชของอากู๋แล้ว)

บทความนี้เขียนค้างไว้เกือบอาทิตย์แล้ว เพราะไม่มีเวลาทำ project ทดสอบประสิทธิภาพระหว่างการประกาศตัวแปรทั้ง 3 แบบ ไม่ว่าจะเป็น string.Empty หรือ String.Empty และ “” วันนี้มีเวลาว่างเลยเคลียร์บทความนี้ไปเลยดีกว่า

หลายครั้ง “ผมได้ยินเพื่อนบอกว่า string.Empty หรือ String.Empty ดีกว่า “” เพราะ “” จะสร้าง “” ใหม่ทุกครั้ง และการสร้าง “” ใหม่ทุกครั้งทำให้โปรแกรมทำงานช้า” หรือบางคนเคยถามผมว่า string.Empty กับ String.Empty ต่างกันหรือเปล่า

ผมขอตอบคำถามที่ 2 ก่อนว่า string.Empty กับ String.Empty ไม่ต่างกัน string (s ตัวเล็ก) เป็น alias ไปยัง class String เท่านั้นเอง (ผมขอข้ามการทดสอบส่วนนี้ไปนะครับ เพราะไม่มีเวลา)

เมื่อเรารู้แล้วว่า string.Empty และ String.Empty เหมือนกัน เรากลับมาที่คำถามแรก string.Empty ดีกว่า “” จริงหรือเปล่า? เรามาทดสอบกันง่ายๆ โดยใช้ code ด้านล่าง

Code (C#)
private void TestA()
{
    string a = string.Empty;
    string b = a;
}


Code (C#)
private void TestB()
{
    string c = "";
    string d = c;
}


เมื่อเรา compile แล้วเราจะได้ CIL ต่อไปนี้

Code (C#)
.method private hidebysig instance void TestA() cil managed
{
  .maxstack 1
  .locals init (
  [0] string a,
  [1] string b)
  L_0000: nop
  L_0001: ldsfld string [mscorlib]System.String::Empty
  L_0006: stloc.0
  L_0007: ldloc.0
  L_0008: stloc.1
  L_0009: ret
}


Code (C#)
.method private hidebysig instance void TestB() cil managed
{
  .maxstack 1
  .locals init (
  [0] string c,
  [1] string d)
  L_0000: nop
  L_0001: ldstr ""
  L_0006: stloc.0
  L_0007: ldloc.0
  L_0008: stloc.1
  L_0009: ret
}


จะเห็นได้ว่าบรรทัดที่ต่างกันมีเพียงบรรทัดเดียวคือ บรรทัดที่ 8 คือ

Code (C#)
L_0001: ldsfld string [mscorlib]System.String::Empty


กับ

Code (C#)
L_0001: ldstr ""


สิ่งที่ต่างกันของ 2 บรรทัดนี้คือการ load ข้อมูลจาก static field (คำสั่ง ldsfld) กับ load string ใหม่ (คำสั่ง ldstr) เข้าไปเท่านั้นเอง และจาก CIL จะเห็นได้ว่า string.Empty กับ “” จะมีการ reuse ใช้ใหม่เหมือนกัน เพื่อให้เกิดความมั่นใจว่าทั้ง 2 method ให้ผลลัพธ์เหมือนกันจริง เราสามารถทดสอบด้วย assembly ของทั้ง 2 methods ได้เช่นกัน (assembly ในที่นี้คือ assembly ที่เป็นภาษาเครื่อง ไม่ใช่ .NET Assembly) ซึ่งผลออกมาตามด้านล่าง

Code (C#)
p.TestA();
 00000050  mov         ecx,dword ptr [ebp-40h]
 00000053  cmp         dword ptr [ecx],ecx
 00000055  call        FD44B0C0
 0000005a  nop


Code (C#)
p.TestB();
 0000005b  mov         ecx,dword ptr [ebp-40h]
 0000005e  cmp         dword ptr [ecx],ecx
 00000060  call        FD44B0C8
 00000065  nop


จะเห็นได้ว่าทั้ง 2 methods มีการเรียกใช้ memory ที่ตำแหน่งเดียวกัน (อ้างอิงจากคำสั่ง mov ในบรรทัดที่ 2) เพราะฉะนั้นเราจึงสรุปได้ว่า string.Empty และ “” ไม่ต่างกันในแง่ของประสิทธิภาพจากการพิสูจน์ด้านบน

-----------------------------------------------------------------------------

หลงเข้าใจว่า string.empty ดีกว่า quote ซะตั้งนาน นึกว่า quote ต้องสร้าง object เปลือง memory

สุดท้ายผลเหมือนกันซะอีก แต่ยังไงก็ชอบใช้ string.empty มากกว่า เพราะมันสื่อกว่า



Tag : .NET









ประวัติการแก้ไข
2010-07-28 16:00:40
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2010-07-28 15:59:09 By : tungman View : 5448 Reply : 4
 

 

No. 1



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ขอบคุณสำหรับบทความดี ๆ ครับ ส่วนมากผมจะใช้ "" ซะมากกว่าครับ และไม่ค่อยได้สนใจเท่าไหร่

นับถือในความรู้ลึกจริง ๆ ครับ






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-07-28 17:39:42 By : webmaster
 


 

No. 2



โพสกระทู้ ( 3,144 )
บทความ ( 1 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์


ถ้าเป็น string จะใช้อะไรก็ได้ครับ ไม่มีผลอะไรอยู่แล้ว

แต่บางทีคิดอะไรเล่นๆ สร้าง control ขึ้นมาสักตัว แล้วมี property

บางตัวที่ต้องป้อนเป็น color ก็เลยต้องเช็คว่า user ป้อนค่ามาหรือไม่

ผมเลยต้องใช้ Color.Empty ในการตรวจสอบ ก็เลยใช้ให้มันเป็นมาตรฐานเดียวกันไป
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-07-28 22:41:50 By : tungman
 

 

No. 3



โพสกระทู้ ( 1,603 )
บทความ ( 1 )



สถานะออฟไลน์


อ่อค่ะ ปกติใช้ string.empty อยู่แล้ว เหตุผลคือให้ code อธิบายตัวเองและสื่อความหมายมากกว่า
คือเวลาเขียนจะไม่ค่อยเขียน comment เท่าไหร่ แต่จะเขียน code แบบอธิบายตัวเองไปในตัวค่ะ
ส่วนเรื่อง performance ไม่ค่อยได้ดูเท่าไหร่ สนใจว่า maintenance ง่ายมากกว่า
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-07-29 17:27:27 By : blurEyes
 


 

No. 4



โพสกระทู้ ( 321 )
บทความ ( 5 )



สถานะออฟไลน์
Twitter Facebook

ชอบ String.Empty ครับ มันอ่านแล้วน่าดู

แต่ที่ทำงานเขาชอบใช้ "" กันมากกว่า

ก็คงแล้วแต่คนครับ แต่ผมก็ชอบ String.Empty อยู่ดี
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-08-01 21:44:58 By : kenessar
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : String.Empty กับ string.Empty ดีกว่า “” จริงหรือเปล่า?
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 00
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่