2013-04-07 30 views
7

tưởng tượng bạn có một ứng dụng (trình đơn) viết bằng C#làm thế nào tôi có thể giới hạn kích thước bộ nhớ cho quá trình .net/mono

Theo mặc định, ứng dụng được phân bổ bộ nhớ ảo rất lớn, nhiều hơn so với nó cần (ví dụ bộ nhớ cư trú là khoảng 10mb, trong khi bộ nhớ ảo là khoảng vài GB).

Trong Java nó có thể sử dụng một tùy chọn để hạn chế điều này với java -mx128m

Làm thế nào tôi có thể làm tương tự cho các ứng dụng .net/mono? Và câu hỏi tiền thưởng: có thể thực thi/thay đổi tùy chọn GC để luôn giữ mức sử dụng bộ nhớ thấp nhất có thể (thu thập càng sớm càng tốt, không khi hệ thống hết bộ nhớ)

về cơ bản mục tiêu của tôi là tạo ra một ứng dụng net với bộ nhớ tối thiểu dấu chân

EDIT: để làm cho nó rõ ràng hơn tôi chèn kịch bản này, cho rằng hầu hết các ứng dụng .net dường như có vấn đề tương tự:

tôi chạy một MonoDevelop, mà là ứng dụng C# dưới mono - nó ăn MB bộ nhớ ảo, trong khi nó chỉ sử dụng 291 MB bộ nhớ thường trú. Điều đó có nghĩa là ứng dụng chỉ sử dụng ít hơn 300MB bộ nhớ nhưng nó yêu cầu 1800MB vì ​​lý do không xác định. Lý do này là những gì tôi muốn khám phá cũng như cách làm thế nào để ngăn chặn nó làm như vậy.

Đó có thể không phải là vấn đề đối với hầu hết người dùng, nhưng nó có thể là vấn đề đối với các ứng dụng chạy trên các cụm như SGE khi tác vụ bị giới hạn bởi bộ nhớ ảo.

+0

Nó sẽ không thể tốt hơn để tìm ra lý do tại sao *** * ** ứng dụng đang phân bổ rất nhiều bộ nhớ ảo? Thay vì chỉ cần thiết lập một công tắc mà bỏ nó cho bộ nhớ? –

+0

bạn không hiểu câu hỏi, hoặc có thể tôi đã không hỏi đúng cách. Đây không phải là về một ứng dụng nhất định, đó là về tất cả các ứng dụng .net nói chung. Java có công tắc này đặt giới hạn cho bộ nhớ ảo, buộc nó phải sử dụng càng ít bộ nhớ càng tốt. Điều đó rất hữu ích trên các cụm nâng cao như SGE, nơi tác vụ bị giới hạn bởi bộ nhớ ảo. Câu hỏi của tôi là nếu có khả năng tương tự cho. Net để GC được trong tình huống khi nó chạy ra khỏi bộ nhớ sớm hơn toàn bộ hệ thống không – Petr

+0

@CodyGray ứng dụng là tất nhiên phân bổ rất nhiều bộ nhớ vì đó là tự nhiên cho. Net, chỉ vì nó là tự nhiên đối với bất kỳ ngôn ngữ nào khác sử dụng bộ thu gom rác - nó không giải phóng bộ nhớ trừ khi nó cần giải phóng bộ nhớ và phân bổ rất nhiều bộ nhớ ảo, trong khi chỉ sử dụng bộ nhớ nhỏ, ứng dụng "Hello world" đơn giản java có thể ăn tới vài GB bộ nhớ hoạt động - nó phụ thuộc vào cấu hình của trình thông dịch - xem http://stackoverflow.com/questions/561245/virtual-memory-usage-from-java-under-linux-too-much-memory Sử dụng – Petr

Trả lời

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