คำอธิบายโดยละเอียดของ Web.config + การเพิ่มประสิทธิภาพ asp.net
ผู้เขียน:Eve Cole
เวลาอัปเดต:2009-07-01 16:44:14
1. ทำความเข้าใจกับไฟล์ Web.config
ไฟล์ Web.config เป็นไฟล์ข้อความ xml ซึ่งใช้เพื่อเก็บข้อมูลการกำหนดค่าของแอปพลิเคชันเว็บ asp.NET (เช่นวิธีการตรวจสอบสิทธิ์ที่ใช้กันมากที่สุดสำหรับการตั้งค่าแอปพลิเคชันเว็บ asp.NET) ซึ่งสามารถปรากฏได้ในทุก ๆ ขั้นตอนของแอปพลิเคชันในไดเร็กทอรี เมื่อคุณสร้างแอปพลิเคชันเว็บใหม่ผ่าน .NET ไฟล์ Web.config เริ่มต้นจะถูกสร้างขึ้นโดยอัตโนมัติในไดเรกทอรีรากตามค่าเริ่มต้น รวมถึงการตั้งค่าการกำหนดค่าเริ่มต้น และไดเรกทอรีย่อยทั้งหมดจะสืบทอดการตั้งค่าการกำหนดค่า หากคุณต้องการแก้ไขการตั้งค่าคอนฟิกูเรชันของไดเร็กทอรีย่อย คุณสามารถสร้างไฟล์ Web.config ใหม่ในไดเร็กทอรีย่อยได้ โดยสามารถให้ข้อมูลการกำหนดค่าเพิ่มเติมจากข้อมูลการกำหนดค่าที่สืบทอดมาจากไดเร็กทอรีหลัก และยังสามารถแทนที่หรือแก้ไขการตั้งค่าที่กำหนดไว้ในไดเร็กทอรีหลักได้อีกด้วย
(1).Web.Config ถูกจัดเก็บไว้ในข้อกำหนดไฟล์ xml และไฟล์การกำหนดค่าแบ่งออกเป็นรูปแบบต่อไปนี้
1. ลักษณะการประกาศตัวจัดการส่วนการกำหนดค่า: ตั้งอยู่ที่ด้านบนของไฟล์การกำหนดค่าและอยู่ในแท็ก <configSections>
2. คุณสมบัติการกำหนดค่าแอปพลิเคชันเฉพาะ: อยู่ใน <appSetting> คุณสามารถกำหนดข้อมูล เช่น การตั้งค่าคงที่ส่วนกลางสำหรับแอปพลิเคชันได้
3. คุณสมบัติการตั้งค่าส่วนการกำหนดค่า: ตั้งอยู่ในส่วน <system.Web> โดยจะควบคุมพฤติกรรมของรันไทม์ asp.net
4. คุณลักษณะของกลุ่มส่วนการกำหนดค่า: การใช้แท็ก <sectionGroup> คุณสามารถปรับแต่งการจัดกลุ่มและวางไว้ภายใน <configSections> หรือภายในแท็ก <sectionGroup> อื่นๆ ได้
(2) แต่ละส่วนของส่วนการกำหนดค่า
1.<configuration> องค์ประกอบรูทของส่วน ส่วนอื่นๆ อยู่ข้างใน
2. <appSetting> ส่วน ส่วนนี้ใช้เพื่อกำหนดการตั้งค่าแอปพลิเคชัน สำหรับการตั้งค่าที่ไม่แน่นอนบางอย่าง ผู้ใช้ยังสามารถตั้งค่าการใช้งานของตนเองตามสถานการณ์จริงได้:
I.<การตั้งค่าแอป>
<เพิ่มคีย์ = "Conntction" value = "server=192.168.85.66;userid=sa;password=;database=Info;"/>
<การตั้งค่าแอป>
มีการกำหนดค่าคงที่สตริงการเชื่อมต่อ และสตริงการเชื่อมต่อสามารถแก้ไขได้ในแอปพลิเคชันจริงโดยไม่ต้องแก้ไขโค้ดโปรแกรม
II.<การตั้งค่าแอป>
<add key="ErrPage" value="Error.aspx"/><appSettings> กำหนดหน้าการเปลี่ยนเส้นทางข้อผิดพลาด
3.<compilation> รูปแบบส่วน:
<การรวบรวม
ค่าเริ่มต้นภาษา = "c #"
แก้ปัญหา = "จริง"
-
I. ภาษาเริ่มต้น: กำหนดภาษาของโค้ดพื้นหลัง คุณสามารถเลือกได้สองภาษา: c# และ vb.net
IIdebug: เมื่อเป็นจริง การดีบัก aspx จะเริ่มต้นขึ้น เมื่อเท็จ การดีบัก aspx จะไม่เริ่มต้น ซึ่งจะเป็นการปรับปรุงประสิทธิภาพของแอปพลิเคชันเมื่อทำงาน โดยทั่วไป โปรแกรมเมอร์จะตั้งค่าเป็น true เมื่อพัฒนา และตั้งค่าเป็น false เมื่อส่งมอบให้กับลูกค้า
4.รูปแบบส่วน <customErrors>:
<ข้อผิดพลาดแบบกำหนดเอง
โหมด = "ระยะไกลเท่านั้น"
defaultRedirect="error.aspx"
<สถานะข้อผิดพลาด = "440" เปลี่ยนเส้นทาง = "err440page.aspx"/>
<สถานะข้อผิดพลาด = "500" เปลี่ยนเส้นทาง = "err500Page.aspx"/>
-
I.mode: มี 3 สถานะ: เปิด, ปิด และ RemoteOnly เปิดหมายความว่าข้อมูลที่ปรับแต่งจะแสดงอยู่เสมอ ปิดหมายความว่าข้อมูลข้อผิดพลาด asp.net โดยละเอียดจะแสดงอยู่เสมอ RemoteOnly หมายความว่าข้อมูลที่ปรับแต่งจะแสดงเฉพาะสำหรับผู้ใช้ที่ไม่ได้ทำงานบนเว็บเซิร์ฟเวอร์ในเครื่องเท่านั้น
II.defaultRedirect: ที่อยู่ URL ที่ใช้ในการเปลี่ยนเส้นทางเมื่อเกิดข้อผิดพลาด ไม่จำเป็น
III.statusCode: ระบุรหัสสถานะข้อผิดพลาด โดยระบุสถานะข้อผิดพลาดเฉพาะ
IV การเปลี่ยนเส้นทาง: มีข้อผิดพลาดในการเปลี่ยนเส้นทาง URL
5. รูปแบบส่วน <globalization>:
<โลกาภิวัฒน์
ขอการเข้ารหัส = "utf-8"
การตอบกลับการเข้ารหัส = "utf-8"
fileEncoding="utf-8"
-
I.requestEncoding: ใช้เพื่อตรวจสอบการเข้ารหัสของแต่ละคำขอที่เข้ามา
II.responseEncoding: ใช้เพื่อตรวจสอบการเข้ารหัสเนื้อหาของการตอบกลับที่ส่งกลับ
III.fileEncoding: ใช้เพื่อตรวจสอบการเข้ารหัสเริ่มต้นสำหรับ aspx, asax และการแยกวิเคราะห์ไฟล์อื่นๆ
6.รูปแบบส่วน <sessionState>:
<สถานะเซสชัน
โหมด = "ใน Proc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="แหล่งข้อมูล=127.0.0.1;Trusted_Connection=yes"
ไร้คุกกี้ = "เท็จ"
หมดเวลา = "20"
-
I.mode: แบ่งออกเป็น off, Inproc, StateServer, SqlServer ระบุ
mode = InProc จะถูกจัดเก็บไว้ในกระบวนการ คุณสมบัติ: มีประสิทธิภาพดีที่สุดและความเร็วสูงสุด แต่ไม่สามารถแชร์ข้ามเซิร์ฟเวอร์หลายเครื่องได้ mode = "StateServer" จะถูกจัดเก็บไว้ในเซิร์ฟเวอร์สถานะ เซิร์ฟเวอร์ ใช้วิธีนี้ อย่างไรก็ตาม ข้อมูลจะถูกจัดเก็บไว้ในเซิร์ฟเวอร์สถานะ เมื่อเซิร์ฟเวอร์สถานะล้มเหลว ข้อมูลจะหายไป Mode="SqlServer" จะถูกจัดเก็บไว้ในเซิร์ฟเวอร์ SQL
II. stateConnectionString: ระบุชื่อเซิร์ฟเวอร์ที่แอปพลิเคชัน asp.net เก็บสถานะเซสชันระยะไกล ค่าเริ่มต้นคือเครื่องท้องถิ่น
III.sqlConnectionString: เมื่อใช้ฐานข้อมูลสถานะเซสชัน ให้ตั้งค่าสตริงการเชื่อมต่อที่นี่
IV. ไม่ใช้คุกกี้: เมื่อตั้งค่าเป็นจริง หมายความว่าไม่ได้ใช้สถานะเซสชันคุกกี้เพื่อระบุลูกค้า
V. TimeOut: ใช้เพื่อกำหนดเวลาสำหรับการจัดเก็บสถานะเซสชัน หากเกินขีดจำกัดเวลา เซสชันจะสิ้นสุดลงโดยอัตโนมัติ
7.รูปแบบส่วน <authentication>:
<โหมดการรับรองความถูกต้อง = "แบบฟอร์ม">
<ชื่อแบบฟอร์ม = ".ASPXUSERDEMO" loginUrl = "การป้องกัน Login.aspx" = "ทั้งหมด" หมดเวลา = "30"/>
</การรับรองความถูกต้อง>
<การอนุญาต>
<ปฏิเสธผู้ใช้="?"/>
</การอนุญาต>
I.Windows: ใช้วิธีการรับรองความถูกต้องของ IIS
II.Forms: การใช้การตรวจสอบตามแบบฟอร์ม
III.Passport: ใช้โหมดการตรวจสอบคุกกี้ Passport
IV.ไม่มี: ไม่ได้ใช้วิธีการยืนยันใดๆ ความหมายของคุณลักษณะของโหนดแบบฟอร์มที่ฝังอยู่ในนั้น:
I.Name: ระบุชื่อของคุกกี้ HTTP ที่ใช้ในการตรวจสอบสิทธิ์ให้เสร็จสมบูรณ์
II.LoginUrl: URL ของเพจที่ถูกเปลี่ยนเส้นทางหากการตรวจสอบล้มเหลวหรือหมดเวลา โดยปกติจะเป็นหน้าเข้าสู่ระบบ ซึ่งจะทำให้ผู้ใช้สามารถเข้าสู่ระบบได้อีกครั้ง
III.การป้องกัน: ระบุวิธีการป้องกันข้อมูลคุกกี้
สามารถตั้งค่าเป็น: ทั้งหมด ไม่มี การตรวจสอบการเข้ารหัส การป้องกันสี่วิธี
ก. ทั้งหมดหมายถึงการเข้ารหัสข้อมูลและดำเนินการตรวจสอบความถูกต้องด้วยสองวิธี
ข. ไม่มี หมายความว่าคุกกี้ไม่ได้รับการปกป้อง
ค. การเข้ารหัสหมายถึงการเข้ารหัสเนื้อหาคุกกี้
d. การตรวจสอบความถูกต้องหมายถึงการตรวจสอบความถูกต้องของเนื้อหาคุกกี้
IV. หมดเวลา: ระบุเวลาหมดอายุของคุกกี้ เข้าสู่ระบบอีกครั้งหลังจากหมดเวลา
การปรับเปลี่ยนไฟล์ Web.config ณ รันไทม์อาจมีผลโดยไม่ต้องเริ่มบริการใหม่ (หมายเหตุ: ข้อยกเว้นสำหรับส่วน <processModel>) แน่นอนว่าไฟล์ Web.config สามารถขยายได้ คุณสามารถปรับแต่งพารามิเตอร์การกำหนดค่าใหม่ และเขียนตัวจัดการส่วนการกำหนดค่าเพื่อจัดการได้
ไฟล์การกำหนดค่า web.config (การตั้งค่าเริ่มต้น) รหัสต่อไปนี้ทั้งหมดควรอยู่ใน
<การกำหนดค่า>
<system.เว็บ>
และ
</system.เว็บ>
</การกำหนดค่า>
เพื่อวัตถุประสงค์ในการเรียนรู้ ตัวอย่างต่อไปนี้จะละเว้นแท็ก xml นี้
1. บทบาทของส่วน <authentication>: กำหนดค่าการสนับสนุนการรับรองความถูกต้อง asp.NET (สี่ประเภท: Windows, Forms, PassPort และไม่มี) องค์ประกอบนี้สามารถประกาศได้ในระดับคอมพิวเตอร์ ไซต์ หรือแอปพลิเคชันเท่านั้น ต้องใช้องค์ประกอบ <authentication> กับส่วน <authorization>
ตัวอย่าง:
ตัวอย่างต่อไปนี้คือไซต์การกำหนดค่าการรับรองความถูกต้องตามแบบฟอร์ม เมื่อผู้ใช้ที่ไม่ได้เข้าสู่ระบบเข้าถึงเว็บเพจที่ต้องมีการรับรองความถูกต้อง เว็บเพจจะข้ามไปยังหน้าเว็บเข้าสู่ระบบโดยอัตโนมัติ
<โหมดการรับรองความถูกต้อง = "แบบฟอร์ม">
<ฟอร์ม loginUrl = "logon.aspx" name = ".FormsAuthCookie"/>
</การรับรองความถูกต้อง>
องค์ประกอบ loginUrl แสดงถึงชื่อของหน้าเว็บสำหรับเข้าสู่ระบบ และชื่อแสดงถึงชื่อคุกกี้
2. บทบาทของส่วน <การอนุญาต>: ควบคุมการเข้าถึงไคลเอ็นต์ไปยังทรัพยากร URL (เช่น การอนุญาตให้ผู้ใช้ที่ไม่ระบุชื่อเข้าถึง) องค์ประกอบนี้สามารถประกาศได้ทุกระดับ (คอมพิวเตอร์ ไซต์ แอปพลิเคชัน ไดเร็กทอรีย่อย หรือเพจ) จำเป็นต้องใช้ร่วมกับส่วน <authentication>
ตัวอย่าง: ตัวอย่างต่อไปนี้ปิดการใช้งานการเข้าถึงของผู้ใช้ที่ไม่ระบุชื่อ
<การอนุญาต>
<ปฏิเสธผู้ใช้="?"/>
</การอนุญาต>
หมายเหตุ: คุณสามารถใช้ user.identity.name เพื่อรับชื่อผู้ใช้ที่ผ่านการรับรองความถูกต้องในปัจจุบัน คุณสามารถใช้เมธอด web.Security.FormsAuthentication.RedirectFromLoginPage เพื่อเปลี่ยนเส้นทางผู้ใช้ที่ผ่านการรับรองความถูกต้องไปยังเพจที่ผู้ใช้เพิ่งร้องขอ
3. บทบาทของส่วน <compilation>: กำหนดการตั้งค่าการคอมไพล์ทั้งหมดที่ใช้โดย asp.NET แอตทริบิวต์การดีบักเริ่มต้นคือ "True" ควรตั้งค่าเป็น False หลังจากคอมไพล์และส่งมอบโปรแกรมเพื่อการใช้งาน (รายละเอียดอธิบายไว้ในไฟล์ Web.config และละเว้นตัวอย่างไว้ที่นี่)
4.<ข้อผิดพลาดแบบกำหนดเอง>
บทบาท: ให้ข้อมูลเกี่ยวกับข้อความแสดงข้อผิดพลาดแบบกำหนดเองสำหรับแอปพลิเคชัน asp.NET ใช้ไม่ได้กับข้อผิดพลาดที่เกิดขึ้นในบริการเว็บ xml
ตัวอย่าง: เมื่อเกิดข้อผิดพลาด ให้ข้ามไปยังหน้าข้อผิดพลาดที่กำหนดเอง
<customErrors defaultRedirect="ErrorPage.aspx" mode="RemoteOnly">
</ข้อผิดพลาดแบบกำหนดเอง>
องค์ประกอบ defaultRedirect แสดงถึงชื่อของเว็บเพจข้อผิดพลาดที่กำหนดเอง องค์ประกอบโหมดระบุว่า: แสดงข้อมูลที่กำหนดเอง (เป็นมิตร) ให้กับผู้ใช้ที่ไม่ได้ทำงานบนเว็บเซิร์ฟเวอร์ในเครื่อง
5. บทบาทของส่วน <httpRuntime>: กำหนดการตั้งค่ารันไทม์ asp.NET HTTP ส่วนนี้สามารถประกาศในระดับคอมพิวเตอร์ ไซต์ แอปพลิเคชัน และไดเร็กทอรีย่อย
ตัวอย่าง: ควบคุมขนาดสูงสุดของไฟล์ที่ผู้ใช้อัปโหลดเป็น 4M เวลาสูงสุดเป็น 60 วินาที และจำนวนคำขอสูงสุดเป็น 100
<httpRuntime maxRequestLength = "4096" allowanceTimeout = "60" appRequestQueueLimit = "100"/>
6. <หน้า>
บทบาท: ระบุการตั้งค่าการกำหนดค่าเฉพาะหน้า (เช่น ว่าจะเปิดใช้งานสถานะเซสชัน สถานะการดู ว่าจะตรวจจับอินพุตของผู้ใช้หรือไม่ เป็นต้น) <pages> สามารถประกาศได้ในระดับคอมพิวเตอร์ ไซต์ แอปพลิเคชัน และไดเร็กทอรีย่อย
ตัวอย่าง: อย่าตรวจพบว่ามีข้อมูลที่อาจเป็นอันตรายในเนื้อหาที่ผู้ใช้ป้อนในเบราว์เซอร์หรือไม่ (หมายเหตุ: รายการนี้จะถูกตรวจพบโดยค่าเริ่มต้น หากคุณใช้การไม่ตรวจจับ คุณต้องเข้ารหัสหรือตรวจสอบอินพุตของผู้ใช้) ลูกค้า สถานะมุมมองที่เข้ารหัสจะถูกตรวจสอบเมื่อมีการโพสต์เพจกลับ เพื่อตรวจสอบว่าสถานะมุมมองไม่ได้ถูกแก้ไขในฝั่งไคลเอ็นต์ (หมายเหตุ: รายการนี้ไม่ได้รับการตรวจสอบตามค่าเริ่มต้น)
<เพจบัฟเฟอร์ = "true" EnableViewStateMac = "true" validateRequest = "false"/>
7. <สถานะเซสชัน>
ฟังก์ชัน: กำหนดการตั้งค่าสถานะเซสชันสำหรับแอปพลิเคชันปัจจุบัน (เช่น การตั้งค่าว่าจะเปิดใช้งานสถานะเซสชันหรือไม่ และตำแหน่งที่จะบันทึกสถานะเซสชัน)
ตัวอย่าง:
<sessionState mode="InProc" cookieless="true" หมดเวลา = "20"/>
</สถานะเซสชัน>
บันทึก:
mode="InProc" หมายถึง: จัดเก็บสถานะเซสชันไว้ในเครื่อง (คุณสามารถเลือกที่จะเก็บไว้ในเซิร์ฟเวอร์ระยะไกลหรือเซิร์ฟเวอร์ SAL หรือปิดใช้งานสถานะเซสชันได้)
cookieless="true" หมายถึง: เปิดใช้งานสถานะเซสชันหากเบราว์เซอร์ของผู้ใช้ไม่รองรับคุกกี้ (ค่าเริ่มต้นคือ False)
timeout="20" หมายถึง จำนวนนาทีที่เซสชันสามารถไม่ได้ใช้งาน
8. <ติดตาม>
ฟังก์ชั่น: กำหนดค่าบริการติดตาม asp.NET ซึ่งส่วนใหญ่ใช้สำหรับการทดสอบโปรแกรมเพื่อพิจารณาว่าข้อผิดพลาดเกิดขึ้นที่ใด
ตัวอย่าง: ต่อไปนี้คือการกำหนดค่าเริ่มต้นใน Web.config:
<ติดตามเปิดใช้งาน = "false" requestLimit = "10" pageOutput = "false" TracMode = "SortByTime" localOnly = "true" />
บันทึก:
Enabled="false" หมายถึงไม่เปิดใช้งานการติดตาม
requestLimit="10" ระบุจำนวนคำขอติดตามที่เก็บไว้บนเซิร์ฟเวอร์
pageOutput="false" หมายความว่าสามารถเข้าถึงเอาต์พุตการติดตามได้ผ่านยูทิลิตีการติดตามเท่านั้น
TraceMode="SortByTime" บ่งชี้ว่าข้อมูลการติดตามถูกแสดงตามลำดับที่ประมวลผลการติดตาม
localOnly="true" หมายความว่าโปรแกรมดูการติดตาม (trace.axd) ใช้สำหรับโฮสต์เว็บเซิร์ฟเวอร์เท่านั้น กระบวนการส่วนการกำหนดค่าไฟล์ Web.config แบบกำหนดเองแบ่งออกเป็นสองขั้นตอน
1. ประกาศชื่อของส่วนการกำหนดค่าและชื่อของคลาส .NET Framework ที่จัดการข้อมูลการกำหนดค่าในส่วนระหว่างแท็ก <configSections> และ </configSections> ที่ด้านบนของไฟล์การกำหนดค่า
2. ทำการตั้งค่าจริงสำหรับส่วนที่ประกาศไว้หลังพื้นที่ <configSections>
ตัวอย่าง: สร้างส่วนเพื่อจัดเก็บสตริงการเชื่อมต่อฐานข้อมูล
<การกำหนดค่า>
<configSections>
<ชื่อส่วน = "appSettings" type = "System.Configuration.NameValueFileSectionHandler, ระบบ, เวอร์ชัน = 1.0.3300.0, วัฒนธรรม =เป็นกลาง, PublicKeyToken = b77a5c561934e089"/>
</configSections>
<การตั้งค่าแอป>
<เพิ่มคีย์ = "scon" value = "server=a;database=northwind;uid=sa;pwd=123"/>
</การตั้งค่าแอป>
<system.เว็บ>
-
</system.เว็บ>
</การกำหนดค่า>
การเข้าถึงแฟ้ม Web.config คุณสามารถเข้าถึงแฟ้ม Web.config ได้โดยใช้คอลเลกชันสตริงแบบคงที่ ConfigurationSettings.AppSettings ตัวอย่าง: รับสตริงการเชื่อมต่อที่สร้างขึ้นในตัวอย่างด้านบน ตัวอย่างเช่น:
สตริงคงที่ที่ได้รับการป้องกัน Isdebug = ConfigurationSettings.AppSettings ["debug"]
2. คำอธิบายโดยละเอียดเกี่ยวกับการกำหนดค่าเซสชันใน web.config หลังจากเปิดไฟล์การกำหนดค่า Web.config ของแอปพลิเคชัน เราจะพบย่อหน้าต่อไปนี้:
< สถานะเซสชัน
โหมด = "ใน Proc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="แหล่งข้อมูล=127.0.0.1;Trusted_Connection=yes"
ไร้คุกกี้ = "เท็จ"
หมดเวลา = "20"
-
ส่วนนี้จะกำหนดค่าวิธีที่แอปพลิเคชันจัดเก็บข้อมูลเซสชัน การดำเนินการต่างๆ ของเราด้านล่างนี้มุ่งเน้นไปที่การกำหนดค่านี้เป็นหลัก ก่อนอื่นเรามาดูความหมายของเนื้อหาที่มีอยู่ในการกำหนดค่านี้กันก่อน ไวยากรณ์ของโหนด sessionState เป็นดังนี้:
< โหมด sessionState="ปิด|InProc|StateServer|SQLServer"
ไม่มีคุกกี้ = "true|false"
หมดเวลา = "จำนวนนาที"
stateConnectionString = "tcpip = เซิร์ฟเวอร์: พอร์ต"
sqlConnectionString="สตริงการเชื่อมต่อ sql"
stateNetworkTimeout = "จำนวนวินาที"
-
คุณลักษณะที่จำเป็นคือ: คำอธิบายตัวเลือกแอตทริบิวต์
โหมดจะกำหนดตำแหน่งที่จะจัดเก็บข้อมูลเซสชัน
Ø ปิด ถูกตั้งค่าให้ไม่ใช้ฟังก์ชันเซสชัน
Ø InProc ถูกตั้งค่าให้จัดเก็บเซสชันในกระบวนการ ซึ่งเป็นวิธีการจัดเก็บข้อมูลใน asp นี่คือค่าเริ่มต้น
Ø StateServer ถูกตั้งค่าให้จัดเก็บเซสชันในบริการของรัฐที่เป็นอิสระ
Ø การตั้งค่า SQLServer จะจัดเก็บเซสชันไว้ในเซิร์ฟเวอร์ sql
แอ็ตทริบิวต์ทางเลือกคือ: คำอธิบายตัวเลือกแอททริบิวต์
Ø ไม่ใช้คุกกี้จะตั้งค่าที่เก็บข้อมูลเซสชันของลูกค้า
Ø ture ใช้โหมดไม่มีคุกกี้
Ø false ใช้โหมดคุกกี้ นี่เป็นค่าเริ่มต้น
Ø การหมดเวลาจะกำหนดจำนวนนาทีหลังจากนั้นเซิร์ฟเวอร์จะให้ข้อมูลเซสชันโดยอัตโนมัติ ค่าเริ่มต้นคือ 20 นาที
stateConnectionString ตั้งชื่อเซิร์ฟเวอร์และหมายเลขพอร์ตที่ใช้เมื่อจัดเก็บข้อมูลเซสชันในบริการสถานะ เช่น "tcpip=127.0.0.1:42424" แอ็ตทริบิวต์นี้จำเป็นเมื่อค่าของโหมดคือ StateServer
sqlConnectionString ตั้งค่าสตริงการเชื่อมต่อเมื่อเชื่อมต่อกับเซิร์ฟเวอร์ sql ตัวอย่างเช่น "แหล่งข้อมูล= localhost;Integrated Security=SSPI;Initial Catalog=northwind" แอ็ตทริบิวต์นี้จำเป็นเมื่อค่าของโหมดเป็น SQLServer
stateNetworkTimeout ตั้งค่าจำนวนวินาทีที่ไม่ได้ใช้งาน หลังจากนั้นการเชื่อมต่อ TCP/IP ระหว่างเว็บเซิร์ฟเวอร์และเซิร์ฟเวอร์ที่จัดเก็บข้อมูลสถานะจะถูกตัดการเชื่อมต่อเมื่อใช้โหมด StateServer เพื่อจัดเก็บสถานะเซสชัน ค่าเริ่มต้นคือ 10 วินาที
การจัดเก็บสถานะเซสชันไคลเอ็นต์ใน asp.NET แสดงอยู่ในการแนะนำโมเดลเซสชันด้านบน คุณจะพบว่าสถานะเซสชันควรถูกเก็บไว้ในสองแห่ง ได้แก่ ไคลเอ็นต์และเซิร์ฟเวอร์ ลูกค้ามีหน้าที่รับผิดชอบในการบันทึก SessionID ของเว็บไซต์ที่เกี่ยวข้องเท่านั้น ในขณะที่ข้อมูลเซสชันอื่น ๆ จะถูกบันทึกไว้บนฝั่งเซิร์ฟเวอร์ ใน asp SessionID ของลูกค้าจะถูกจัดเก็บในรูปแบบของคุกกี้ หากผู้ใช้เลือกที่จะปิดการใช้งานคุกกี้ในการตั้งค่าเบราว์เซอร์ เขาจะไม่สามารถเพลิดเพลินกับความสะดวกสบายของเซสชันได้ และอาจไม่สามารถเข้าถึงบางเว็บไซต์ด้วยซ้ำ เพื่อแก้ไขปัญหาข้างต้น วิธีการจัดเก็บข้อมูลเซสชันของลูกค้าใน asp.NET แบ่งออกเป็นสองประเภท: คุกกี้และไม่ใช้คุกกี้
ตามค่าเริ่มต้นใน asp.NET คุกกี้จะยังคงใช้เพื่อจัดเก็บข้อมูลเซสชันบนไคลเอนต์ หากเราต้องการใช้ Cookieless เพื่อจัดเก็บข้อมูลเซสชันบนไคลเอนต์ วิธีการจะเป็นดังนี้:
ค้นหาไดเร็กทอรีรากของเว็บแอปพลิเคชันปัจจุบัน เปิดไฟล์ Web.Config และค้นหาย่อหน้าต่อไปนี้:
< สถานะเซสชัน
โหมด = "ใน Proc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="แหล่งข้อมูล=127.0.0.1;Trusted_Connection=yes"
ไร้คุกกี้ = "เท็จ"
หมดเวลา = "20"
-
cookieless="false" ในย่อหน้านี้เปลี่ยนเป็น: cookieless="true" ด้วยวิธีนี้ ข้อมูลเซสชันของลูกค้าจะไม่ถูกจัดเก็บโดยใช้คุกกี้อีกต่อไป แต่จะถูกจัดเก็บผ่าน URL ปิด IE ปัจจุบัน เปิด IE ใหม่ และกลับมาที่เว็บแอปพลิเคชันอีกครั้ง คุณจะเห็นสิ่งที่คล้ายกับข้อความต่อไปนี้:
ในบรรดาสิ่งเหล่านั้น สิ่งที่ทำเครื่องหมายเป็นตัวหนาใน http://localhost/MyTestApplication/(ulqsek45heu3ic2a5zgdl245 )/default.aspx คือ ID เซสชันของไคลเอ็นต์ โปรดทราบว่าข้อมูลนี้จะถูกเพิ่มโดยอัตโนมัติโดย IIS และจะไม่ส่งผลต่อการเชื่อมต่อปกติก่อนหน้านี้
การเตรียมการสำหรับการจัดเก็บสถานะเซสชันบนฝั่งเซิร์ฟเวอร์ใน asp.NET:
เพื่อให้คุณได้รับประสบการณ์ปรากฏการณ์การทดลองที่ดียิ่งขึ้น คุณสามารถสร้างเพจชื่อ SessionState.aspx แล้วเพิ่มโค้ดต่อไปนี้ใน <body></body>
<scriptrunat="เซิร์ฟเวอร์">
Sub Session_Add (ผู้ส่งเป็นวัตถุ e As EventArgs)
session("MySession") = text1.Value
span1.InnerHtml = "อัปเดตข้อมูลเซสชันแล้ว! < P>เซสชันของคุณประกอบด้วย: < font color=red>" & session("MySession") ToString() & "< /font>"
จบหมวดย่อย
CheckSession ย่อย (ผู้ส่ง As Object, eAs EventArgs)
ถ้า (เซสชัน ("MySession") ไม่มีอะไร) จากนั้น
span1.InnerHtml = "ไม่มีอะไร ข้อมูลเซสชันสูญหาย!"
อื่น
span1.InnerHtml = "เซสชั่นของคุณประกอบด้วย: < สีตัวอักษร= สีแดง>" & เซสชั่น("MySession").ToString() & "< /font>"
สิ้นสุดถ้า
จบหมวดย่อย
</สคริปต์>
< formrunat="server"id="Form2">
< inputid="text1"type="text"runat="server"name="text1">
< inputtype = "ส่ง"runat = "เซิร์ฟเวอร์" OnServerClick = "Session_Add"
value="เพิ่มในสถานะเซสชัน " id="Submit1"name="Submit1">
< inputtype="submit"runat="server"OnServerClick="CheckSession"
value=" ดูสถานะเซสชัน " id="Submit2"name="Submit2">
</ /แบบฟอร์ม>
< ชั่วโมงขนาด = "1">
<fontsize="6">< spanid="span1"runat="server" />< /font>
เพจ SessionState.aspx สามารถใช้เพื่อทดสอบว่าข้อมูลเซสชันสูญหายบนเซิร์ฟเวอร์ปัจจุบันหรือไม่
การจัดเก็บข้อมูลเซสชันเซิร์ฟเวอร์ในกระบวนการ กลับไปที่ย่อหน้าก่อนหน้าของไฟล์ Web.config:
< สถานะเซสชัน
โหมด = "ใน Proc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="แหล่งข้อมูล=127.0.0.1;Trusted_Connection=yes"
ไร้คุกกี้ = "เท็จ"
หมดเวลา = "20"
-
เมื่อค่าของโหมดเป็น InProc แสดงว่าเซิร์ฟเวอร์กำลังใช้โหมดนี้
วิธีนี้จะเหมือนกับโหมดก่อนหน้าใน asp นั่นคือ เซิร์ฟเวอร์จัดเก็บข้อมูลเซสชันในกระบวนการ IIS เมื่อ IIS ถูกปิดและรีสตาร์ท ข้อมูลนี้จะสูญหาย แต่โหมดนี้ยังมีข้อได้เปรียบที่ใหญ่ที่สุดของตัวเองซึ่งก็คือประสิทธิภาพสูงสุด เนื่องจากข้อมูลเซสชันทั้งหมดถูกเก็บไว้ในกระบวนการ IIS IIS จึงสามารถเข้าถึงข้อมูลนี้ได้อย่างรวดเร็ว ประสิทธิภาพของโหมดนี้เร็วกว่าการจัดเก็บข้อมูลเซสชันนอกกระบวนการหรือจัดเก็บข้อมูลเซสชันใน SQL Server จำนวนมาก โหมดนี้ยังเป็นวิธีเริ่มต้นของ asp.NET
เอาล่ะ เรามาทำการทดลองกันดีกว่า เปิดหน้า SessionState.aspx ทันที และป้อนอักขระบางตัวเพื่อจัดเก็บไว้ในเซสชัน จากนั้นเรามารีสตาร์ท IIS โปรดทราบว่าไม่ใช่การหยุดและรีสตาร์ทไซต์ปัจจุบัน แต่ให้คลิกขวาที่โหนดที่มีชื่อเครื่องในเครื่องใน IIS และเลือกรีสตาร์ท IIS (ผมคิดว่าตอนผมใช้ NT4 ผมต้องรีสตาร์ทคอมเพื่อรีสตาร์ท IIS Microsoft จริงๆ @#$%^&) กลับไปที่หน้า SessionState.aspx ตรวจสอบข้อมูล session เมื่อกี้ก็พบว่าข้อมูลถูก สูญหาย.
การจัดเก็บข้อมูลเซสชันเซิร์ฟเวอร์นอกกระบวนการ ขั้นแรกให้เราเปิดเครื่องมือการจัดการ -> บริการ ค้นหาบริการที่ชื่อ: asp.NET State Service และเริ่มต้น ที่จริงแล้ว บริการนี้จะเริ่มกระบวนการบันทึกข้อมูลเซสชัน หลังจากเริ่มบริการนี้ คุณจะเห็นกระบวนการชื่อ aspnet_state.exe จาก Windows Task Manager->กระบวนการ นี่คือกระบวนการที่เราบันทึกข้อมูลเซสชัน
จากนั้น กลับไปที่ย่อหน้าข้างต้นในไฟล์ Web.config และเปลี่ยนค่าโหมดเป็น StateServer หลังจากบันทึกไฟล์แล้ว ให้เปิด IE อีกครั้ง เปิดเพจ SessionState.aspx และบันทึกข้อมูลบางส่วนลงในเซสชัน ในเวลานี้ ให้เรารีสตาร์ท IIS และกลับไปที่เพจ SessionState.aspx เพื่อตรวจสอบข้อมูลเซสชันในตอนนี้ และพบว่าข้อมูลไม่สูญหาย
ในความเป็นจริง วิธีการจัดเก็บข้อมูลเซสชันนอกกระบวนการนี้ไม่เพียงแต่หมายความว่าสามารถจัดเก็บข้อมูลภายนอกกระบวนการของเครื่องภายในเครื่องได้เท่านั้น แต่ยังสามารถจัดเก็บข้อมูลเซสชันในกระบวนการของเซิร์ฟเวอร์อื่นได้อีกด้วย ในขณะนี้ ไม่เพียงแต่คุณจะต้องเปลี่ยนค่าโหมดเป็น StateServer เท่านั้น แต่คุณยังต้องกำหนดค่าพารามิเตอร์ที่เกี่ยวข้องใน stateConnectionString ด้วย ตัวอย่างเช่น การคำนวณของคุณคือ 192.168.0.1 หากคุณต้องการจัดเก็บเซสชันในกระบวนการของคอมพิวเตอร์ที่มีที่อยู่ IP 192.168.0.2 คุณต้องตั้งค่าดังนี้: stateConnectionString="tcpip=192.168.0.2:42424" แน่นอนอย่าลืมติดตั้ง .NET Framework บนคอมพิวเตอร์ 192.168.0.2 และเริ่มบริการ asp.NET State Services
การจัดเก็บข้อมูลเซสชันของเซิร์ฟเวอร์ในเซิร์ฟเวอร์ sql ก่อนอื่นให้เราทำงานเตรียมการก่อน เริ่มบริการเซิร์ฟเวอร์ sql และพร็อกซีเซิร์ฟเวอร์ sql รันไฟล์สคริปต์ชื่อ InstallSqlState.sql ในเซิร์ฟเวอร์ sql ไฟล์สคริปต์นี้จะสร้างฐานข้อมูลใน SQL Server สำหรับการจัดเก็บข้อมูลเซสชันโดยเฉพาะ และงานตัวแทน SQL Server ที่ดูแลฐานข้อมูลข้อมูลเซสชัน เราสามารถค้นหาไฟล์นั้นได้ในพาธต่อไปนี้:
[ไดรฟ์ระบบ]winntMicrosoft.NETFramework[เวอร์ชัน]
จากนั้นเปิดตัววิเคราะห์คิวรี เชื่อมต่อกับเซิร์ฟเวอร์ sql เปิดไฟล์ทันทีและดำเนินการ รอสักครู่ฐานข้อมูลและงานจะถูกสร้างขึ้น ในขณะนี้ คุณสามารถเปิด Enterprise Manager และดูว่ามีการเพิ่มฐานข้อมูลใหม่ที่เรียกว่า ASPState แล้ว แต่มีบางขั้นตอนที่เก็บไว้ในฐานข้อมูลนี้เท่านั้น และไม่มีตารางผู้ใช้ ข้อมูลเซสชันจะถูกเก็บไว้ในตาราง ASPStateTempSessions ของฐานข้อมูล tempdb และตาราง ASPStateTempApplications อื่นเก็บข้อมูลวัตถุแอปพลิเคชันใน asp ตอนนี้ทั้งสองตารางนี้ถูกสร้างขึ้นโดยสคริปต์เช่นกัน นอกจากนี้ ให้ตรวจสอบ Management->SQL server Agent->Jobs และพบว่ายังมีงานเพิ่มเติมที่เรียกว่า ASPState_Job_DeleteExpiredSessions อีกด้วย งานนี้จริงจะลบข้อมูลเซสชันที่หมดอายุออกจากตาราง ASPStateTempSessions ทุกนาที
ต่อไปเราจะกลับไปที่ไฟล์ Web.config และแก้ไขค่าโหมดเป็น SQLServer โปรดทราบว่าคุณต้องแก้ไขค่าของ sqlConnectionString ในเวลาเดียวกัน รูปแบบคือ:
sqlConnectionString = "แหล่งข้อมูล = localhost; ความปลอดภัยแบบรวม = SSPI;"
แหล่งข้อมูลอ้างอิงถึงที่อยู่ IP ของเซิร์ฟเวอร์เซิร์ฟเวอร์ SQL หากเซิร์ฟเวอร์ SQL และ IIS เป็นเครื่องเดียวกัน ให้เขียน 127.0.0.1 Integrated Security=SSPI หมายถึงการใช้การรับรองความถูกต้องแบบรวมของ Windows ด้วยวิธีนี้ การเข้าถึงฐานข้อมูลจะทำในรูปแบบ asp.NET คุณจะได้รับความปลอดภัยที่ดีกว่าวิธีการตรวจสอบความถูกต้องของเซิร์ฟเวอร์ sql โดยใช้ userid=sa;password=password . แน่นอนว่า หากเซิร์ฟเวอร์ sql ทำงานบนคอมพิวเตอร์เครื่องอื่น คุณอาจต้องรักษาความสอดคล้องของการรับรองความถูกต้องทั้งสองด้านผ่านโดเมน Active Directory
เรามาทำการทดลองกันอีกครั้ง เพิ่มข้อมูลเซสชันไปยัง SessionState.aspx แล้วค้นหาว่าข้อมูลเซสชันมีอยู่แล้วในเซิร์ฟเวอร์ SQL แม้ว่าคุณจะรีสตาร์ทคอมพิวเตอร์ ข้อมูลเซสชันจะไม่สูญหาย ตอนนี้ คุณคงได้เห็นแล้วว่าข้อมูลเซสชันเป็นอย่างไร และจะถูกจัดเก็บไว้ใน SQL Server สิ่งที่คุณสามารถทำได้นั้นขึ้นอยู่กับประสิทธิภาพของคุณ
สรุป 3. การตั้งค่าทั่วไปของการรับรองความถูกต้องแบบฟอร์ม asp.net
การตั้งค่าทั่วไปสำหรับการรับรองความถูกต้องของฟอร์ม asp.net:
1: ใน web.config ให้เพิ่มการรับรองความถูกต้องของแบบฟอร์ม
<โหมดการรับรองความถูกต้อง = "แบบฟอร์ม">
<ชื่อฟอร์ม = "auth" loginUrl = "index.aspx" หมดเวลา = "30" ></ ฟอร์ม >
</การรับรองความถูกต้อง>
<การอนุญาต>
<ปฏิเสธผู้ใช้="?" />
</การอนุญาต>
2: หากมีหน้าลงทะเบียน ผู้ใช้ที่ไม่ระบุชื่อควรได้รับอนุญาตให้เรียกหน้าลงทะเบียนเพื่อลงทะเบียน
รหัสต่อไปนี้ควรอยู่ระหว่าง <configuration><system.web> และไม่ควรรวมไว้ระหว่าง <system.web>..</system.web>;
----------------ระบุว่าผู้ใช้ที่ไม่ระบุชื่อได้รับอนุญาตให้เข้าถึงเพจ userReg.aspx
<เส้นทางตำแหน่ง = "userReg.aspx">
<system.เว็บ>
<การอนุญาต>
<อนุญาตให้ผู้ใช้ =?" />
</การอนุญาต>
</system.เว็บ>
</ตำแหน่ง>
3. หลังจากเข้าสู่ระบบสำเร็จ จะต้องสร้างตั๋วยืนยันตัวตนเพื่อระบุว่าผู้ใช้ตามกฎหมายที่ผ่านการรับรองความถูกต้องได้ผ่านไปแล้ว
ถ้า (เข้าสู่ระบบสำเร็จ)
System.Web.Security.FormsAuthentication.SetAuthCookie (ชื่อผู้ใช้ เท็จ);
4. เข้าถึงไฟล์ Web.config คุณสามารถเข้าถึงไฟล์ Web.config ได้โดยใช้คอลเลกชันสตริงแบบคงที่ ConfigurationSettings.AppSettings ตัวอย่าง: รับสตริงการเชื่อมต่อที่สร้างขึ้นในตัวอย่างข้างต้น ตัวอย่างเช่น:
สตริงคงที่ที่ได้รับการป้องกัน Isdebug = ConfigurationSettings.AppSettings ["scon"]
การเพิ่มประสิทธิภาพการทำงานของ asp.Net
(1) เลือกวิธีการจัดเก็บสถานะเซสชัน
กำหนดค่าในไฟล์ Webconfig:
<โหมด sessionState = "???" stateConnectionString = "tcpip = 127.0.0.1:42424"
sqlConnectionString="แหล่งข้อมูล=127.0.0.1;Trusted_Connection=yes"
cookieless = "false" หมดเวลา = "20"/>
ASP.NET มีสามวิธีในการจัดเก็บข้อมูลสถานะเซสชัน:
1. เก็บไว้ในกระบวนการ: โหมดแอตทริบิวต์ = InProc
คุณสมบัติ: มีประสิทธิภาพดีที่สุดและความเร็วสูงสุด แต่ไม่สามารถแชร์ข้ามเซิร์ฟเวอร์หลายเครื่องได้
2. เก็บไว้ในเซิร์ฟเวอร์สถานะ: โหมดแอตทริบิวต์ = "StateServer"
คุณลักษณะ: ใช้วิธีนี้เมื่อจำเป็นต้องรักษาข้อมูลเซสชันของผู้ใช้ข้ามเซิร์ฟเวอร์
แต่ข้อมูลจะถูกจัดเก็บไว้ในเซิร์ฟเวอร์สถานะ และเมื่อเซิร์ฟเวอร์สถานะล้มเหลว ข้อมูลจะสูญหาย
3. เก็บไว้ในเซิร์ฟเวอร์ sql: โหมดแอตทริบิวต์ = "SqlServer"
คุณสมบัติ: ปริมาณงานจะใหญ่ขึ้น แต่ข้อมูลจะไม่สูญหาย
อีกสิ่งหนึ่ง:
I. เนื่องจากบางเพจไม่ต้องการสถานะเซสชัน สถานะเซสชันจึงสามารถปิดใช้งานได้:
รหัสจะเป็นดังนี้: <%@ Page EnableSessionState="false" %>
II. หากเพจจำเป็นต้องเข้าถึงตัวแปรเซสชันแต่ไม่ได้รับอนุญาตให้แก้ไข คุณสามารถตั้งค่าสถานะเซสชันของเพจเป็นแบบอ่านอย่างเดียว:
รหัสจะเป็นดังนี้: <%@ Page EnableSessionState="false" %>
เมื่อใช้งานคุณสามารถเลือกวิธีการบางอย่างตามสถานการณ์เฉพาะได้
(2) ใช้เพจ IsPostBack
Page.IsPostBack ระบุว่ามีการส่งคืนจากไคลเอ็นต์หรือไม่ เมื่อรันเป็นครั้งแรก จะไม่ส่งคืนค่าจากไคลเอ็นต์
เป็นเท็จ เมื่อมีการทริกเกอร์เหตุการณ์บนเพจหรือรีเฟรชเพจ ค่าของ Page.IsPostBack จะกลายเป็นจริงเนื่องจากเป็น postback
โดยทั่วไปใช้ใน: วิธี Page_Load:
โมฆะส่วนตัว Page_Load (ผู้ส่งวัตถุ, EventArgs e)
-
ถ้า(!หน้าIsPostBack)
-
....; //โค้ดสำหรับเริ่มต้นเพจ รหัสเหล่านี้จะถูกดำเนินการเมื่อมีการเตรียมใช้งานเพจเป็นครั้งแรก และเมื่อโพสต์กลับเป็นครั้งที่สอง
//จะไม่ถูกดำเนินการอีกครั้ง ปรับปรุงประสิทธิภาพ
-
-
บ่อยครั้งต้องใช้ IsPostBack เนื่องจากตัวควบคุมบางตัวจำเป็นต้องรักษาสถานะไว้หลังจากการกำหนดค่าเริ่มต้น
ตัวอย่างเช่น: DropDownList หากกำหนดค่าเริ่มต้นทุกครั้ง ไม่ว่าผู้ใช้จะเลือกตัวเลือกใดก็ตาม รายการจะถูกเตรียมใช้งานเป็นค่าเริ่มต้น
(3) หลีกเลี่ยงการใช้การควบคุมเซิร์ฟเวอร์
1. สำหรับข้อมูลการแสดงผลแบบคงที่ทั่วไป พยายามอย่าใช้การควบคุมฝั่งเซิร์ฟเวอร์เพื่อแสดงข้อมูลดังกล่าว เนื่องจากการควบคุมฝั่งเซิร์ฟเวอร์จำเป็นต้องโพสต์กลับไปยังเซิร์ฟเวอร์เพื่อดำเนินการ
มันจะลดประสิทธิภาพของการทำงานของโปรแกรม โดยทั่วไปสามารถแสดงผลด้วย <DIV>
หากใช้การควบคุมฝั่งเซิร์ฟเวอร์ การลบ: runat="server" จะช่วยปรับปรุงประสิทธิภาพด้วย
2. ปิดใช้งานมุมมองสถานะของตัวควบคุมฝั่งเซิร์ฟเวอร์ ตัวควบคุมบางตัวไม่จำเป็นต้องรักษาสถานะไว้ คุณสามารถตั้งค่าคุณสมบัติได้: EnableViewState=false;
หากการควบคุมทั้งหน้าไม่จำเป็นต้องรักษามุมมองสถานะ คุณสามารถตั้งค่ามุมมองสถานะของทั้งหน้าเป็นเท็จ:
รหัสจะเป็นดังนี้: <%@ Page EnableViewState="false"%>
3. กำหนดค่าในไฟล์ Web.Config:
เซสชัน asp.NET สามารถกำหนดค่าได้ในองค์ประกอบ Sessionsstate ใน Web.config หรือ Machine.config
นี่คือตัวอย่างการตั้งค่าใน Web.config:
<Sessionsstate หมดเวลา = "10" cookieless = "false" mode = "Inproc" />
(4) หลีกเลี่ยงการใช้ DataGrid
ทุกคนรู้ดีว่า DataGrid นั้นทรงพลัง อย่างไรก็ตาม แม้จะทรงพลัง แต่ก็ยังเพิ่มโอเวอร์เฮดด้านประสิทธิภาพด้วย โดยทั่วไปใช้การควบคุมอื่น: DataList
หรือการควบคุม Repeater สามารถทำได้ พยายามอย่าใช้ DataGrid
(5) การดำเนินการสตริง
1. หลีกเลี่ยงการดำเนินการชกมวย
ตัวอย่างเช่น เรียกใช้ข้อมูลโค้ดสองรายการ:
ทดสอบสตริง = "";
สำหรับ(สำหรับ int i=0;i<10000;i++)
-
ทดสอบ = ทดสอบ + ฉัน;
-
และ
ทดสอบสตริง = "";
สำหรับ(สำหรับ int i=0;i<10000;i++)
-
ทดสอบ = ทดสอบ + i.ToString();
-
ข้อมูลโค้ดด้านล่างนี้มีประสิทธิภาพมากกว่าอย่างเห็นได้ชัด เนื่องจาก i เป็นจำนวนเต็ม ระบบจะต้องใส่กล่องและแปลง i เป็นประเภทสตริงก่อนที่จะเชื่อมต่อ
ผู้อ่านสามารถคัดลอกไปยังเครื่องของตนเองและทดสอบได้
2. ใช้คลาส StringBulider
เมื่อทำการต่อสตริง: string str = str1 + str2 + ....;
โดยทั่วไป สำหรับการเชื่อมต่อมากกว่าสามรายการ วิธีที่ดีที่สุดคือใช้ StringBuilder แทนคลาสสตริง StringBuilder สามารถหลีกเลี่ยงการสร้างออบเจ็กต์สตริงใหม่ได้
การสูญเสียประสิทธิภาพ
โดยทั่วไปจะใช้เมื่อประกอบคำสั่ง sql: StringBulider
ผู้อ่านสามารถทดสอบบนเครื่องของตนเองได้
3. ใช้ให้น้อยที่สุดเท่าที่จะเป็นไปได้:
พยายาม
-
จับ
-
ในที่สุด
-
คำชี้แจง ประสิทธิภาพการดำเนินการของคำสั่งนี้ค่อนข้างต่ำ
(6) การเพิ่มประสิทธิภาพการใช้งาน ADO.Net
1. การเชื่อมต่อฐานข้อมูลเปิดและปิด เปิดเมื่อจำเป็นต้องมีการเชื่อมต่อ และปิดการเชื่อมต่อทันทีหลังจากเข้าถึงฐานข้อมูล
ตัวอย่างเช่น ลองดูข้อมูลโค้ดสองรายการ:
ฉัน.
ชุดข้อมูล ds = ชุดข้อมูลใหม่ ();
SqlConnection MyConnection = SqlConnection ใหม่ ("เซิร์ฟเวอร์ = localhost; uid = sa; pwd =; ฐานข้อมูล = NorthWind");
SqlCommand myCommand = SqlCommand ใหม่ (strSql, MyConnection);
SqlDataAdapter myAdapter=ใหม่ SqlDataAdapter(queryStr,connectionStr);
MyConnection.Open(); //เปิดการเชื่อมต่อ
for(int i=0;i<1000;i++) //for loop จำลองการดำเนินการเชิงตรรกะทางธุรกิจก่อนที่จะรับข้อมูล
-
เธรด.สลีป(1,000);
-
myAdapter.Fill(ds);
for(int i=0;i<1000;i++) //for loop จำลองการดำเนินการทางธุรกิจหลังจากได้รับข้อมูล
-
เธรด.สลีป(1,000);
-
MyConnection.Close(); //ปิดการเชื่อมต่อ
ครั้งที่สอง
ชุดข้อมูล ds = ชุดข้อมูลใหม่ ();
SqlConnection MyConnection = SqlConnection ใหม่ ("เซิร์ฟเวอร์ = localhost; uid = sa; pwd =; ฐานข้อมูล = NorthWind");
SqlCommand myCommand = SqlCommand ใหม่ (strSql, MyConnection);
SqlDataAdapter myAdapter=ใหม่ SqlDataAdapter(queryStr,connectionStr);
for(int i=0;i<1000;i++) //for loop จำลองการดำเนินการเชิงตรรกะทางธุรกิจก่อนที่จะรับข้อมูล
-
เธรด.สลีป(1,000);
-
MyConnection.Open(); //เปิดการเชื่อมต่อ
myAdapter.Fill(ds);
MyConnection.Close(); //ปิดการเชื่อมต่อ
for(int i=0;i<1000;i++) ///// for loop จำลองการดำเนินการตรรกะทางธุรกิจหลังจากได้รับข้อมูล
-
เธรด.สลีป(1,000);
-
รหัส display II ดีกว่ารหัส I มาก ตรงบริเวณการเชื่อมต่อตั้งแต่เนิ่นๆ หากมีผู้ใช้จำนวนมาก พูลการเชื่อมต่อน่าจะเต็ม ในกรณีที่ร้ายแรงอาจเกิดการชนได้
2. การสืบค้นฐานข้อมูล
I. สร้างคำสั่ง sql โดยตรง SQL Server จะต้องคอมไพล์ทุกครั้ง และจะไม่มีการปรับปรุงประสิทธิภาพครั้งใหญ่ นอกจากนี้ยังไม่ปลอดภัยเพียงพอ ถูกโจมตีได้ง่าย
II. ใช้คำสั่ง sql พร้อมพารามิเตอร์ ด้วยวิธีนี้ เซิร์ฟเวอร์ sql จะคอมไพล์เพียงครั้งเดียว และคำสั่งที่คอมไพล์แล้วสามารถนำมาใช้ใหม่สำหรับพารามิเตอร์ต่างๆ ได้ ปรับปรุงประสิทธิภาพ
III. ใช้ขั้นตอนการจัดเก็บเซิร์ฟเวอร์ sql เป็นอิสระและง่ายต่อการแก้ไขและบำรุงรักษาสามารถทำหน้าที่ส่งคำสั่งได้หลายครั้งซึ่งจะช่วยลดค่าใช้จ่ายของเครือข่าย
ไหล. กระบวนงานที่เก็บไว้ไม่จำเป็นต้องมีประสิทธิภาพมากกว่าคำสั่ง ถ้าตรรกะทางธุรกิจซับซ้อนมาก บางครั้งคำสั่งก็มีประสิทธิภาพมากกว่าคำสั่งที่เก็บไว้
(6) การเพิ่มประสิทธิภาพแคช
แคชมีสองประเภท: แคชของหน้าและแคช API
1. ใช้การแคชหน้าและการแคชส่วนย่อย
<%@ ระยะเวลา OutputCache = "5" VaryByParam = "ไม่มี"%>
<%@ ระยะเวลาเอาท์พุตแคช=60 VaryByParam=”TextBox1,TextBox2” %>
หมายเหตุ: ระยะเวลาคือการตั้งค่าเวลาหมดอายุของแคช
VarByParam คือว่าการตั้งค่าเปลี่ยนแปลงตามพารามิเตอร์หรือไม่ เมื่อไม่มี พารามิเตอร์ทั้งหมดจะใช้แคชเดียวกัน
เมื่อตั้งค่า TextBox1 ให้แคชแยกกันตามค่าต่าง ๆ ของ TextBox1 เมื่อมีหลายพารามิเตอร์ ให้แคชพวกมันรวมกัน
แคช 2.API เพื่อใช้ในการใช้งาน
I. ตัวอย่างการใช้แคช:
http://blog.csdn.net/chengking/archive/2005/10/03/494545.aspx
II. ให้ความสนใจกับความแตกต่างระหว่าง Page.Cache และ HttpContext.Current.Cache เมื่อใช้:
พวกเขาอ้างถึงวัตถุเดียวกัน ในเพจ ให้ใช้ Page.Cache หากคุณใช้ใน global.asax หรือคลาสของคุณเอง: HttpContext.Current.Cache