kadang-kadang dapatkan pengecualian OutOfMemory dari aplikasi .NET yang sibuk
Jawaban untuk ini terlalu rumit untuk ditampung dalam suatu jawaban. Lihat " Tuning. Performa Aplikasi NET " untuk perawatan lengkap dari subjek.
Berikut ini ringkasan yang sangat disederhanakan (tapi masih cukup bagus) dari Bruno Jouhier :
Lebih jauh lagi, .NET runtime tidak membiarkan Anda mencapai 2 GB. Pengumpul sampah bekerja dengan menyalin objek hidup, sehingga diperlukan ruang yang cukup untuk melakukan salinannya.
Edit:
Ini usaha saya untuk penjelasan ...
Jika Anda bertanya-tanya berapa ukuran maksimum memori proses pekerja (seperti yang dilaporkan oleh Task Manager) untuk Proses Pekerja ASP.NET di x86, jawabannya adalah "itu tergantung" .
Dalam setiap jenis kode yang dikelola seperti Java atau .NET, programmer melepaskan kendali memori yang baik sebagai penebusan dosa karena tidak harus berurusan dengan pointer. Saat program dijalankan, Heap dan Stack akan dibersihkan secara berkala oleh Pengumpul Sampah .
Khususnya dalam hal ASP.NET, pengumpul sampah berjalan di dalam proses pekerja yang sama dengan situs web. GC mengkonsumsi memori sendiri. Berapa banyak memori sepenuhnya merupakan fungsi dari bagaimana kode aplikasi Anda ditulis. Satu aplikasi mungkin dapat menggunakan memori 1,8GB sementara yang lain mungkin tersedak 500MB. Untuk memahami alasannya , Anda perlu membuat profil aplikasi spesifik Anda.
Setiap proses pada OS Windows x86 terbatas pada 2gb kecuali Anda telah menetapkan sakelar / 3gb di file boot.ini Anda, yang dalam hal ini proses dapat menggunakan 3gb.
sumber
Dari posting blog ini "Rekomendasi untuk Pengaturan Kumpulan Aplikasi SharePoint" :
Dari pengalaman saya, 800 MB adalah treshold untuk mesin 32bit (RAM 2-4 GB). Ini mendaur ulang kumpulan aplikasi sebelum membuang "kehabisan memori" pengecualian.
sumber
Pastikan Anda tidak mengatur ukuran memori virtual pada kumpulan aplikasi Anda. Jika Anda menetapkan nilai ini ke angka di luar rentang yang diizinkan, itu akan kembali ke 512MB. Lihat KB923197 .
Juga perhatikan bahwa jika Anda menjalankan aplikasi ASP.Net, ASP.Net akan mendaur ulang kumpulan pada 60% dari batas memori 2GB, atau 1,2 GB. Ini bukan skenario Anda ~ 500, tetapi pada apppools 32 bit dengan penggunaan memori yang besar, kami terkadang men-tweak ini untuk mendapatkan sedikit lebih banyak memori.
sumber
Pada Windows 2003 Anda dapat mengatur Ekstensi Alokasi Fisik (PAE) untuk menggunakan semua memori. Memori default untuk apppool IIS6 adalah 5MB .
sumber