2010-08-27 7 views
6

Tôi đang cố gắng lập hồ sơ thời gian khởi động ứng dụng của mình, vì vậy tôi đã viết một chương trình C# nhỏ sẽ khởi động ứng dụng của tôi bằng phương thức Process.Start() và thời gian sử dụng đồng hồ bấm giờ.Tại sao thời gian khởi động ứng dụng của tôi chậm hơn khi tôi sử dụng Process.Start()?

Khi tôi cố tự khởi động ứng dụng (chỉ bằng cách nhấp vào nó), có thể mất 2-3 giây. Khi tôi cố gắng khởi động ứng dụng bằng chương trình thử nghiệm của mình, phải mất 8-10 giây. Thời gian khởi động luôn khác nhau về độ lớn đó.

Bất kỳ ý tưởng nào tại sao sử dụng Process.Start để bắt đầu một tệp thực thi sẽ ảnh hưởng đến thời gian khởi động quá nhiều?

+0

bạn có đang chạy nó trong trình gỡ rối không? Hoặc trong chế độ Phát hành? Bạn có bắt đầu nó trong studio trực quan hoặc trên dòng lệnh không? –

+0

Tôi đang chạy nó trong chế độ phát hành và từ dòng lệnh – dreadpirateryan

Trả lời

1

Cảm ơn sự giúp đỡ của bạn. Tôi có câu trả lời, và nó không liên quan đến Process.Start.

Sau khi tôi bắt đầu quá trình, tôi đã chờ xử lý cửa sổ cụ thể để biết rằng ứng dụng thực sự xuất hiện. Vòng lặp quá chặt. Tôi đã giới thiệu một giấc ngủ 200 ms trong vòng lặp while, và thời gian khởi động lại bình thường.

+0

dreadpirateriyan, vui lòng chọn tùy chọn này làm câu trả lời, ngay cả khi đó là từ chính bạn để giúp những người khác tìm thấy điều này nhanh hơn. – Marcel

0

Đầu mối của bạn phải là Process.Start() nằm trong không gian tên System.Diagnostics. Khi bạn bắt đầu một quá trình theo cách này, bạn đang gắn một loạt các màn hình/thanh tra vào nó. Điều này chắc chắn thêm một chi phí.

Bạn có thể muốn thử gọi ngay Dispose() trên đối tượng Process sau khi bạn khởi động (để tránh việc theo dõi quá trình không cần thiết kéo dài), nhưng bạn sẽ không thể tránh hoàn toàn chi phí liên quan.

+0

Tôi không thấy bất kỳ điều gì trong tài liệu về việc sử dụng Process.Start dẫn đến hiệu suất thời gian chạy chậm hơn cho ứng dụng sinh sản. bạn có đường liên kết nào không? Tôi sẽ thích đọc về điều đó. –

0

Đơn giản chỉ cần đặt, bạn đang bắt đầu thực sự là hai quá trình không chỉ là một. Đó là lý do tại sao phải mất nhiều thời gian hơn.

Khi bạn nhấp đúp vào ứng dụng của mình, bạn đang tải chỉ một ứng dụng và tất cả đó là DLL.

Khi bạn chạy ứng dụng chẩn đoán, trước tiên bạn đang tải ứng dụng đầu tiên với bộ sưu tập .NET của nó. Ứng dụng phải là JIT'd (Chỉ trong thời gian biên dịch: không miễn phí). Chỉ sau đó sau đó tất cả được thực hiện, sau đó ứng dụng KHÁC sẽ bắt đầu. Nếu ứng dụng đích của bạn cũng là một ứng dụng .NET, thì toàn bộ chu kỳ lặp lại chính nó.

+1

Anh ấy định thời gian với Đồng hồ bấm giờ, vì vậy có lẽ anh ấy chỉ đo thời gian khởi động của Quy trình chứ không phải thời gian khởi động của ứng dụng thử nghiệm của anh ấy. –