ฉันเพิ่มสองบรรทัดต่อไปนี้ที่ด้านบนของinit.el
:
(setq gc-cons-threshold (eval-when-compile (* 1024 1024 1024)))
(run-with-idle-timer 2 t (lambda () (garbage-collect)))
นั่นหมายความว่าแทนที่จะรวบรวมขยะทุก ๆ 800kb ของหน่วยความจำที่จัดสรร Emacs ทำเช่นนั้นเมื่อไม่ได้ใช้งานนั่นคือเมื่อการหยุดชั่วคราวไม่รบกวนฉัน (มันยังรวบรวมหลังจากจัดสรรหน่วยความจำ 1GB แล้ว แต่ฉันไม่คิดว่ามันจะเกิดขึ้น)
นี่เป็นการปรับปรุงเวลาเริ่มต้นของฉันประมาณสองในสาม ในทางทฤษฎีมันควรปรับปรุงประสิทธิภาพโดยทั่วไป มีข้อเสียสำหรับวิธีนี้หรือไม่?
ตามโพสต์นี้โดย Stefan Monnier : "อย่าแตะต้องมันเลยดีกว่าใน Emacs-22 เราแนะนำ gc-cons-เปอร์เซนต์ซึ่งให้ผลประโยชน์เช่นเดียวกับการเพิ่ม gc-cons-threshold แต่ไม่มีข้อเสียและไม่ต้องยุ่งกับมัน นั่นคือฉันขอแนะนำให้ผู้ใช้ลบการตั้งค่า gc-cons-threshold ใด ๆ จาก. emac ของพวกเขา "
—
izkon
@Erik ฉันคิดว่าคุณสามารถแทนที่
—
Hi-Angel
(eval-when-compile (* 1024 1024 1024))
ด้วย(กรุณาทำผมว่าสวยทุกคนที่มาเจอคำถามของคุณสำเนารหัสของคุณเข้าสู่การตั้งค่าของพวกเขา)most-positive-fixnum
@ Hi-Angel ฉันไม่คิดว่าเป็นความคิดที่ดี หาก Emacs จัดสรรหน่วยความจำจำนวนมากโดยไม่ได้ใช้งานจริงมันควร gc แทนที่จะดำเนินการจัดสรรต่อไปจนกว่าระบบจะต้องสลับหรือแม้กระทั่งหน่วยความจำหมด หากมีสิ่งใด 1GB สูงเกินไป
—
Erik
gc-cons-threshold
สูงเกินกว่าที่คุณเต็มใจจะตีในเวลาใดก็ตามเนื่องจากคุณควรสมมติว่าคุณจะตีค่านั้นเป็นครั้งคราว (หลังจากนั้นใครจะรู้ว่าอาจมีขยะมากขึ้น โดยงานที่ไม่ได้ใช้งานบางอย่างที่ไม่คาดคิดอย่างกระตือรือร้น) ฉันไม่เห็นปัญหาใด ๆ เกี่ยวกับการเรียกใช้ gc ด้วยตัวจับเวลาว่าง แต่ฉันคิดว่าการตั้งค่าขีด จำกัด สำหรับ non-idle gc ให้สูงที่สุดเท่าที่ดูเหมือนเป็น OTT และการแสดงผลของฉันก็คือค่าอาจถูกเลือกว่าเป็น "สูงกว่าฉัน ฉันจะต้องการ "มากกว่า" สูงสุดที่ฉันต้องการใช้ "