2015-05-04 38 views
14

Sau khi cài đặt Visual Studio 2015 RC1, tôi đã tải dự án ASP.NET kế thừa và thay đổi phiên bản .NET thành 4.6. Dự án hoạt động tốt, nhưng trang web vẫn tải chậm như mọi khi. Tôi đã mong RyuJIT đá vào, nhưng có vẻ như không phải vậy.Bật RyuJIT trong Visual Studio 2015 RC

Tôi đã xem this thread về RyuJIT và tôi không thể thấy bất kỳ dấu vết nào của RyuJIT với bất kỳ phương pháp nào được mô tả ở đó.

Vấn đề tương tự cũng xảy ra với một dự án bảng điều khiển trống. Tôi không thể nhìn thấy Ryujit trong cửa sổ đầu ra, cửa sổ Modules hoặc như một cửa sổ đang chạy.

Vì vậy, hoặc không thể phát hiện ra RyuJIT như trước đây trong các bản xem trước trước đó, hoặc nó không hoạt động. Dù bằng cách nào, tôi bị mắc kẹt.

Làm cách nào tôi có thể xác minh rằng RyuJIT đang chạy trong VS 2015 và tôi phải làm gì để chạy trong trường hợp nó không hoạt động?

+0

Bạn nhận ra rằng RyuJIT chỉ là 64 bit? Có lẽ bạn đang chạy như 32-bit? – leppie

+0

@leppie: Tôi đang làm việc trên Windows 8.1 x64. Trong giao diện điều khiển dự án. Hộp kiểm "Ưu tiên 32 bit" không được chọn, vì vậy tôi giả sử nó đang sử dụng 64 bit. Trong dự án ASP.NET, hộp kiểm đó chuyển sang màu xám, không chắc chắn điều đó có nghĩa là gì. –

+0

Không có tùy chọn để * không * sử dụng nó trong .NET 4.6, nó luôn được sử dụng để jit mã 64-bit. Do * not * mong đợi một sự cải thiện tốc độ, đó không phải là mục tiêu của dự án. –

Trả lời

6

Trước tiên, hãy chuyển đến cài đặt của dự án, tab Gỡ lỗi và đảm bảo rằng tính năng gỡ lỗi mã gốc được bật. Điều này cho phép bạn xem các tệp thực thi gốc cũng như được quản lý trong cửa sổ Mô-đun của Visual Studio.

Bây giờ hãy chạy chương trình trong chế độ Gỡ lỗi hoặc Phát hành và mở cửa sổ Mô-đun. Bạn sẽ thấy một trong hai điều sau:

  • Hoặc chỉ clrjit.dll được tải có nghĩa là RyuJIT đang được sử dụng để biên dịch tất cả mã được quản lý. Hoặc cả hai clrjit.dll và compatjit.dll được nạp có nghĩa là trình biên dịch JIT64 kế thừa đang được sử dụng để biên dịch mã được quản lý của bạn trong khi mã được quản lý trong các tệp thực thi khác có thể sử dụng trình biên dịch.

compatjit.dll được tải khi bật fallback mechanism. Nếu không, nó không được tải. Lưu ý rằng nếu bạn đã cài đặt .NET 4.6 (còn gọi là .NET 2015), thì RyuJIT sẽ được sử dụng theo mặc định ngay cả khi bạn nhắm mục tiêu các phiên bản cũ hơn của khung công tác.

Về RyuJIT và JIT64. Bản thân mã được tạo ra của JIT64 hiện nhanh hơn mã được tạo bởi RyuJIT. Vì vậy, tôi không mong đợi cải thiện hiệu suất trong khía cạnh này. Mặt khác, thời gian biên dịch thay đổi. Theo số Microsoft, thời gian biên dịch của RyuJIT có thể nhanh hơn JIT64 lên tới 30% và chậm hơn lên tới 15%. Vì vậy, tôi không mong đợi cải thiện hiệu suất trong khía cạnh này.

Mọi thứ có thể thay đổi một chút, tuy nhiên, khi .NET 2015 được phát hành.

Note

Nếu nền tảng mục tiêu là "Bất kỳ CPU", là "thích 32-bit" hộp kiểm trong tab Build phải được đánh dấu. Nếu không, JIT x86 sẽ được sử dụng.

+0

Cảm ơn câu trả lời của bạn! :) –

6

Ở đây bạn đi

Sau khi cài đặt, có hai cách để bật RyuJIT. Nếu bạn chỉ muốn kích hoạt RyuJIT cho một ứng dụng, hãy thiết lập một biến môi trường: COMPLUS_AltJit = *. Nếu bạn muốn bật RyuJIT cho toàn bộ máy của mình, hãy đặt khóa đăng ký HKLM \ SOFTWARE \ Microsoft.NETFramework \ AltJit thành chuỗi "*". Cả hai phương pháp này đều làm cho CLR 64 bit sử dụng RyuJIT thay vì JIT64. Và cả hai đều là các thiết lập cài đặt tạm thời RyuJIT không thực hiện bất kỳ thay đổi vĩnh viễn cho máy tính của bạn (ngoài cài đặt các tập tin RyuJIT trong một thư mục, đó là.)

Taken từ .NET Framework 4.6 - Testing with RyuJIT

Nhưng nó phải được được kích hoạt theo mặc định

.NET Framework 4.6 bao gồm trình biên dịch Just-In-Time (JIT) mới cho các quy trình 64 bit, được gọi là RyuJIT. Nó được kích hoạt theo mặc định. Nó vẫn là một phiên bản xem trước, vì vậy bạn có thể khám phá các vấn đề chưa được khắc phục.

Taken từ .NET Framework 4.6 - Testing with RyuJIT

Đối với thử nghiệm mục đích nếu bạn encouter bất kỳ ngoại lệ với RyuJIT, bạn có thể tắt nó đi với một thiết lập trong App.config. Điều này sử dụng JIT64 cũ hơn.

<configuration> 
<runtime> 
    <useLegacyJit enabled="1"> 
</runtime> 
</configuration> 

Tuy nhiên, RyuJIT CTP5 hiện không hoạt động trên Visual Studio "14" CTP4. Bạn không cần nó anyway, kể từ khi RyuJIT được kích hoạt theo mặc định trên Visual Studio "14" CTP4. :) (Các phiên bản của RyuJIT trong Visual Studio "14" CTP4 là hơi già hơn CTP này, nhưng không nhiều lắm.)

Taken từ RyuJIT CTP5: Getting closer to shipping, and with better SIMD support

Tôi tìm thấy một bài đăng trên blog để xác định JIT sử dụng trong thời gian chạy, nhưng phải mất một lỗi được biết đến trong trình biên dịch den JIT64 vào tài khoản. Mã ví dụ được đăng here. Tôi không chắc đây có phải là cách đáng tin cậy để xác định nó hay không.

+0

Cảm ơn bạn đã trả lời!Trong trường hợp đó, tôi tự hỏi tại sao RyuJIT lại không làm bất cứ điều gì về tốc độ biên dịch. Bạn có bất kỳ ý tưởng tại sao điều này có thể là trường hợp? –

+0

@AdrianGrigore: Không, tôi không chắc chắn. Mục tiêu nền tảng nào được đặt cho dự án của bạn? AnyCPU, x64? – Jehof

+0

Có. Dự án được đặt thành x64, "Ưu tiên 32 bit" bị tắt và dự án đang chạy trong IIS trên Windows 8.1 x64. Ngoài ra, nếu tôi đặt mục tiêu xây dựng thành x86, IIS từ chối chạy nó. –

0

RyuJIT kích hoạt tự động trong khi bạn biên dịch mã và đây chỉ là trình biên dịch chạy trên chế độ 64 bit với bộ nhớ RAM để tăng biên dịch nhanh hơn 30% và thời gian trong trình biên dịch JIT chỉ là một thành phần của thời gian khởi động, do đó, ứng dụng không khởi động nhanh gấp hai lần chỉ vì JIT nhanh gấp hai lần.

bạn có thể kiểm tra trạng thái bộ nhớ ram hiện tại và tiến trình đang chạy với bộ nhớ trống miễn phí nếu đủ rồi nó phải chạy nhanh hơn nếu không có thời gian xem xét cấp phát bộ nhớ.

+0

Thời gian biên dịch không giảm kể từ khi tôi cài đặt VS 2015 RC. Tôi đang làm việc trên một máy tính với 16 GB RAM, với khoảng 5 GB bộ nhớ phụ có sẵn, vì vậy tôi không nghĩ rằng thiếu RAM là vấn đề. –

Các vấn đề liên quan