หนึ่งในโปรเจ็กต์ของฉันเองต้องมีการดำเนินการเขียนหลายครั้งในไฟล์ 65536 ไฟล์ในเวลาเดียวกัน
หากคุณเปิดไฟล์ทั้งหมดก่อน ให้เขียนซ้ำๆ และปิดไฟล์ทั้งหมดในที่สุด จากนั้นจะใช้เวลาประมาณ 16 นาทีในการดำเนินการเขียนครั้งแรกให้เสร็จสิ้น และจะใช้เวลาประมาณ 40 นาทีสำหรับครั้งที่สอง ไม่มีการทดสอบเพิ่มเติม
สำหรับ (int i = 0; i < 65536; i++)
-
fileStream[i] = FileStream ใหม่(buffDir+"\"+ i.ToString() + ".dat", FileMode.Create,FileAccess.Write, FileShare.Write,14000);
-
เขียน;
เขียน;
เขียน;
-
สำหรับ (int i = 0; i < 65536; i++)
-
fileStream[i] .ปิด();
-
หากมีการเปิดไฟล์ที่เกี่ยวข้องเพียงไฟล์เดียวในระหว่างการดำเนินการเขียน ไฟล์นั้นจะถูกปิดหลังจากการเขียน จากนั้นจะใช้เวลาประมาณ 2 นาที 30 วินาทีในการดำเนินการเขียนทั้งหมดให้เสร็จสิ้น
วงจร{
สำหรับ (int i=0;i<65536;i++)
-
เปิด;
เขียน;
ปิด;
-
-
จะเห็นได้ว่าประสิทธิภาพของวิธีที่สองนั้นมากกว่าวิธีแรกมาก การเปิดไฟล์ทั้งหมดในครั้งเดียวต้องใช้หน่วยความจำจำนวนมาก สิ่งสำคัญที่สุดคือเมื่อ .net ประมวลผลสตรีมไฟล์ อาจต้องจัดสรรหน่วยความจำจำนวนมากและรีไซเคิล ซึ่งใช้หน่วยความจำและทรัพยากรจำนวนมาก
นอกจากนี้ ฉันยังทำการทดสอบด้วย หากจำนวนไฟล์ค่อนข้างน้อย ประสิทธิภาพของวิธีแรกก็ดีกว่าวิธีที่สองมาก
http://xiyangwushi.cnblogs.com/archive/2006/06/28/437409.html