2010-11-17 24 views
13

Tôi đang cân nhắc việc sử dụng tập lệnh Powershell cho trình kích hoạt trên máy chủ Perforce của chúng tôi. Thật không may, ngay cả trên phần cứng nhanh của chúng tôi nó vẫn mất 2 giây để Powershell khởi động. Bây giờ, điều này dường như không có nhiều thời gian trừ khi bạn xem xét rằng 200 người dùng đang đập máy chủ liên tục và kích hoạt có thể (tùy thuộc vào điều kiện) gây ra khóa bảng trong khi nó chạy, trì hoãn các yêu cầu liên quan khác.Làm thế nào để tăng tốc độ khởi động của Powershell trong môi trường 4.0?

Tôi đang tìm cách giảm thời gian khởi động của Powershell. Những thứ tôi đã tìm thấy trên Google:

  • Giảm cấu hình. Đây là cài đặt mặc định, không có tùy chỉnh tiểu sử, không có PSCX, v.v. do đó điều này không giúp ích gì.
  • Chạy NGEN trên mã nhị phân Posh. Đây là lời khuyên cũ cho một vấn đề V1. Chúng tôi đang trên V2.
  • Giữ ấm. Khởi động Posh ban đầu chậm nhưng khởi động lại nhanh. Cũng không hữu ích cho chúng tôi. Trên máy chủ khởi động ấm áp là 2 giây và nó được giữ ấm bởi các yêu cầu thường xuyên.
  • Không sử dụng Powershell cho mục đích này. Vâng, tôi hy vọng sẽ tránh được "giải pháp" đó ...

Có ai có đề xuất nào khác về cắt thời gian khởi động không? Tôi không mong đợi một khởi động nhanh như cmd.exe hoặc một ứng dụng dòng lệnh NET, nhưng nếu tôi có thể nhận được điều này để 0,5 giây tôi nghĩ rằng chúng tôi sẽ được ok. Không thể nào?

CẬP NHẬT - hóa ra đây là sự cố 4.0. Nếu tôi thêm tệp cấu hình như được mô tả trong another SO question, quá trình khởi động mất 2 giây. Nếu tôi để nó ở chế độ mặc định, thì khởi động lại sau một phần tư giây.

Sau đó, tôi nghĩ ... có thể đó là sự cố 4.0 GAC. Vì vậy, tôi chạy kịch bản trên PowerShell Blog nhưng nó nói rằng tất cả các hội đồng đã được ngen'd. Tôi chắc chắn rằng nó thực sự sử dụng 4.0 ngen là tốt.

Vì vậy, tôi là trái với hai lựa chọn:

  • Hình hiểu tại sao 4.0 là rất nhiều đắt hơn 3,5.
  • Chuyển sang khung công tác 3,5 nơi tôi không cần đến và tôi cần hiệu suất.

Tôi muốn giải quyết câu hỏi đầu tiên nhưng không biết bắt đầu từ đâu. Có ai giúp được không?

Trả lời

0

Tôi sợ bạn có thể không may mắn nếu bạn gắn bó với bảng điều khiển máy chủ powershell.exe, trừ khi bạn cảm thấy như viết một trình xử lý tập lệnh được tối ưu hóa bằng cách lưu trữ runspace/runspacefactory trong ứng dụng bảng điều khiển tùy chỉnh - hoặc cửa sổ dịch vụ - bạn tự cuộn mình. Bạn có thể cạo một giây, nhưng khởi động 0,5 cho một ứng dụng .NET là không chắc, đặc biệt nếu các máy chủ bị chặt chẽ cho bộ nhớ.

+1

Ok tôi phát hiện ra đó là sự cố 4.0. Đã cập nhật câu hỏi. – scobi

+1

Urgh. Bạn đang buộc powershell v2.0 chạy trên khung công tác v4? Nó không được thiết kế để làm điều đó. Tôi muốn tôi có thêm chi tiết ... bạn có dotTrace hoặc ANTS profiler để tìm ra nơi mà các tắc nghẽn là? – x0n

+1

Nếu bạn đọc kỹ bài viết SO, bạn sẽ thấy rằng đó là về việc lưu trữ System.Management.Automation.dll trong môi trường 4.0 được quản lý. Giống như anh chàng nói, giao diện điều khiển máy chủ (powershell.exe) không được tối ưu hóa cho 4.0 - trong thực tế, PowerShell.exe thậm chí không phải là một ứng dụng quản lý - đó là bản địa. Nó lưu trữ CLR. – x0n

18

Chạy NGEN trên mã nhị phân Posh. Đây là lời khuyên cũ cho một vấn đề V1. Chúng tôi đang trên V2.

Tôi đã chơi với điều này dưới V3 và tôi phát hiện ra rằng một số hình ảnh đã được tạo .

Và chắc chắn cảm giác như khởi động giờ đây nhanh hơn nhiều. Tôi sẽ biết rõ hơn sau khi khởi động lại , vì đây là lần đầu tiên luôn là điều tồi tệ nhất. Các (tôi cập nhật) kịch bản để làm như vậy với Win 7 là

$env:path = [Runtime.InteropServices.RuntimeEnvironment]::GetRuntimeDirectory() 
[AppDomain]::CurrentDomain.GetAssemblies() | % { 
    if (! $_.location) {continue} 
    $Name = Split-Path $_.location -leaf 
    Write-Host -ForegroundColor Yellow "NGENing : $Name" 
    ngen install $_.location | % {"`t$_"} 
} 
+1

Tôi đã quan sát thấy rằng với một cài đặt sạch của Windows 8.1, lời khuyên này áp dụng và giảm thời gian khởi động Powershell khoảng 10 lần (nếu có một hồ sơ trống). –

2

Sau một câu trả lời tuyệt vời để my question on Technet, tôi phát hiện ra một cách dễ dàng hơn nhiều để kích hoạt NGEN bằng tay (vì nó có vẻ như nó không xảy ra tự động trên một cài đặt sạch của Windows 8.1):

schtasks /Run /TN "\Microsoft\Windows\.NET Framework\.NET Framework NGEN v4.0.30319" 
schtasks /Run /TN "\Microsoft\Windows\.NET Framework\.NET Framework NGEN v4.0.30319 64" 
Các vấn đề liên quan