Tôi đang viết một ứng dụng DSP trong C# (về cơ bản là một trình soạn thảo đa nhiệm). Tôi đã được profiling nó cho một số thời gian trên các máy khác nhau và tôi đã nhận thấy một số điều 'tò mò'.Buộc trình biên dịch .NET JIT tạo mã tối ưu nhất trong khi khởi động ứng dụng
Trên máy chủ, lần chạy đầu tiên của vòng lặp phát lại chiếm khoảng 50% -60% thời gian có sẵn, (tôi cho rằng đó là do JIT thực hiện công việc của mình), sau đó cho các vòng lặp tiếp theo đến mức tiêu thụ ổn định 5%. Vấn đề là, nếu tôi chạy ứng dụng trên máy tính chậm hơn, lần chạy đầu tiên chiếm nhiều thời gian hơn, khiến cho quá trình phát lại bị gián đoạn và làm rối loạn âm thanh đầu ra, điều này là không thể chấp nhận được. Sau đó, nó giảm xuống mức tiêu thụ 8% -10%.
Ngay cả sau lần chạy đầu tiên, ứng dụng luôn gọi một số thói quen tốn thời gian (mỗi 2 giây trở lên), khiến mức tiêu thụ 5% ổn định trải qua các đỉnh rất ngắn 20% -25% . Tôi đã nhận thấy rằng nếu tôi để ứng dụng chạy trong một thời gian thì các đỉnh này cũng sẽ giảm xuống 7% -10%. (Tôi không chắc liệu đó là do JIT biên dịch lại các phần mã này).
Vì vậy, tôi gặp sự cố nghiêm trọng với JIT. Mặc dù ứng dụng sẽ hoạt động tốt ngay cả trong các máy rất chậm, những 'cơn bão biên dịch' này sẽ là một vấn đề lớn. Tôi đang cố gắng tìm ra cách giải quyết vấn đề này và tôi đã đưa ra một ý tưởng, đó là đánh dấu tất cả các thói quen 'hợp lý' với một thuộc tính sẽ cho ứng dụng biết 'ép' chúng trước khi khởi động , do đó, chúng sẽ được tối ưu hóa hoàn toàn khi chúng thực sự cần thiết. Nhưng đây chỉ là một ý tưởng (và tôi không thích nó quá nhiều) hoặc tôi tự hỏi nếu có một giải pháp tốt hơn cho toàn bộ vấn đề.
Tôi muốn nghe ý kiến của các bạn.
(NGEN các ứng dụng không phải là một lựa chọn, tôi thích và muốn tất cả các tối ưu hóa JIT tôi có thể nhận được.)
EDIT:
tiêu thụ bộ nhớ và thu gom rác thải đá không phải là một vấn đề, tôi sử dụng các nhóm đối tượng và đỉnh cao nhất của bộ nhớ trong khi phát lại là 304 Kb.
Nó sẽ giúp nếu bạn nói ** tại sao ** NGEN không phải là một lựa chọn; hiểu vấn đề là một nửa công việc ... –
Tối ưu hóa JIT nào không có sẵn khi NGen-ing? – Will
@Marc: Tôi muốn NGen là ứng dụng cuối cùng, nhưng tôi không muốn sử dụng nó nếu có giải pháp tốt hơn. – Trap