Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 24448|Atbildi: 0

[Avots] . Neto atmiņas pārpilde (System.OutOfMemoryException).

[Kopēt saiti]
Publicēts 14.03.2019 21:47:39 | | | |
Kad notiek OutOfMemonryException? Ja mēs mēģinām izveidot jaunu objektu un atkritumu savācējs nevar atrast brīvu atmiņu, mēs varam noķert izņēmumu; Vēl viens gadījums ir tāds, ka, ja CLR ir nepieciešama atmiņa un sistēma to nevar nodrošināt, tiks izmests arī izņēmums. Bet šajā brīdī mūsu lietojumprogramma nevar uztvert kļūdu.

Atmiņas pārplūdes atkļūdošanas analīze (OutOfMemoryException).

32 bitu operētājsistēmas adresācijas telpa ir 4G, no kuras 2G aizņem operētājsistēma, kas nozīmē, ka lietotāja procesam atstātā atmiņa ir tikai 2G (kas arī atņem daļu no attēla aizņemtās vietas, kad programma ir ielādēta, parasti var izmantot tikai aptuveni 1.6G ~ 1.8G). Ja procesam ir jāpieprasa atmiņa, kamēr tas darbojas, un operētājsistēma tam nevar piešķirt atmiņas vietu, tas radīs atmiņas trūkuma izņēmumu System.OutOfMemoryException .net (izņēmums, kas tiek izmests, ja nav pietiekami daudz atmiņas, lai turpinātu programmas izpildi.). Lai gan galīgā izpausme ir OutOfMemoryException, cēlonis var būt atšķirīgs, un pirms šīs problēmas risināšanas ir jāanalizē procesa pašreizējais atmiņas izmantošanas statuss, lai atrastu pareizo cēloni pirms pareizo zāļu izrakstīšanas. Šeit ir daži padomi šādu problēmu atkļūdošanai.

Plašāku informāciju skatiet šeit:http://blog.csdn.net/lazyleland/article/details/6704661

iis lietojumprogrammu pūla atmiņas pārpildes kļūda System.OutOfMemoryException

ASP.NET tīmekļa serverī atmiņas apjoms, ko ASP.NET var izmantot, parasti nav vienāds ar visu atmiņas apjomu. Konfigurācijas failā machine.config <processModel>konfigurācijas sadaļā ir rekvizīts "memoryLimit", šī īpašuma vērtība ir procentuālā vērtība, noklusējums ir "60", tas ir, ASP.NET process (ASP.NET procesu var redzēt uzdevumu pārvaldniekā, aspnet_wp IIS5, w3wp IIS6) var izmantot 60% no visas fiziskās atmiņas. Kad ASP.NET izmantotās atmiņas apjoms pārsniedz šo ierobežojumu, IIS sāks automātiski pārstrādāt procesu, tas ir, izveidojot jaunu procesu, lai apstrādātu Http pieprasījumus un atgūtu vecā procesa aizņemto atmiņu.

Ja mums ir serveris ar lielu atmiņu, "memoryLimit" vērtība ir attiecīgi jāpielāgo. Piemēram, ja mēs sagatavojam serveri ar chemas-microsoft-com ffice marttags" />t="on"> 4G atmiņu, tad t="on">4G×60%=t="on">2.4G. Tomēr Win32 operētājsistēmām visa atmiņas vieta, ko process var aizņemt, ir tikai t="on">2G. Kad ASP.NET procesa aizņemtā atmiņa sāk sasniegt t="on">2G, jo tā nesasniedz t="on">2.4G "pārstrādes slieksni", IIS nesāks pārstrādes procesa darbību, bet Win32 ierobežojumu dēļ šim procesam faktiski nav iespējams piešķirt vairāk atmiņas, tāpēc OutOfMemoryException, visticamāk, tiks izmests. Lai no tā izvairītos, mums bija attiecīgi jāsamazina "memoryLimit", lai IIS varētu apstrādāt pārstrādi agrāk.

Microsoft iesaka, ka ASP.NET process aizņem ne vairāk kā 60% atmiņas, un vislabāk ir aprēķināt faktisko vērtību ne vairāk kā t="on">800M. Tas nozīmē, ka serverim ar t="on" > 4G atmiņu vislabāk ir iestatīt rekvizītu "memoryLimit" uz "20". Ir ļoti svarīgi noteikt atbilstošu pārstrādes slieksni, lai IIS savlaicīgi pārstrādātu procesus, lai nodrošinātu visa servera stabilu darbību un izvairītos no OutOfMemoryException.

IIS6 ASP.NET procesu pārstrādes slieksni vairs nenosaka rekvizīts "memoryLimit" konfigurācijas sadaļā, bet gan IIS pārvaldnieka lietojumprogrammu pūla konfigurācijas iestatījumi.

Tomēr, pat ja šīs konfigurācijas ir iestatītas pareizi, nav garantijas, ka OutOfMemoryExceptions tiks pilnībā novērsts, un iemesli var būt dažādi un sarežģīti, piemēram, atmiņas atgūšanas operācijas var būt pārāk laikietilpīgas. Izstrādātājiem vienmēr jāpatur prātā, ka savā kodā nedrīkst nevajadzīgi izmantot un netērēt atmiņu. :)

Ja jums ir serveris ar lielu atmiņu un esat neapmierināts ar t="on" >2G atmiņas izmantošanas ierobežojumu Win32 operētājsistēmā, ir divi alternatīvi risinājumi:

  • Startējiet datoru /3GB režīmā un sekojiet saitei pēc metodes dalības raksta
  • Windows Server 2003 64bitu izdevuma izmantošana


Vairāki elementi, lai izvairītos no atmiņas pārpildīšanas

Ja vēlaties izveidot masīvu, pārliecinieties, vai tas ir pareizā izmērā.

Pārliecinieties, vai jums ir pietiekami daudz atmiņas iekšējai lietošanai un jauniem viesotiem objektiem.

Ja programmējat .NET Compact Framework, publiskās valodas izpildlaiks rada šo izņēmumu, ja nav pietiekami daudz atmiņas iekšējai lietošanai vai jaunam pārvaldītam objektam. Lai izvairītos no šī izņēmuma, jāizvairās rakstīt lielas metodes, kas aizņem 64 KB vai vairāk atmiņas.

Pārmērīgu pārvaldītās atmiņas lietojumu bieži izraisa šādi iemesli:

  • Lasiet atmiņā lielas datu kopas.
  • Tiek izveidots pārāk daudz kešatmiņas ierakstu.
  • Augšupielādējiet vai lejupielādējiet lielus failus.
  • Analizējot failus, izmantojiet pārāk daudz regulāro izteiksmju vai virkņu.
  • Pārmērīgs skata statuss.
  • Sesijas stāvoklī ir pārāk daudz datu vai pārāk daudz sesiju.
  • Šo izņēmumu var izvirzīt, ja metode tiek izsaukta COM objektā un metode atgriež lietotāja definētu tipu, kas satur drošu masīvu (nenoteikta izmēra masīvu) ar papildu ziņojumu "Nav pietiekami daudz krātuves vietas, lai pabeigtu šo darbību". Tas ir tāpēc, ka .NET Framework nevar maršalēt strukturālos laukus ar drošiem masīvu tipiem.


Atmiņas pārsnieguma piemērs, ko izraisījusi nepareiza baitu masīvu izmantošana


Ja izvades fails ir īpaši liels, tas var tieši ziņot par System.OutOfMemoryException. Pareizais veids, kā to izdarīt, ir izvadīt faila baitu plūsmu segmentos, bet ir asp.net gatava metode Response.WriteFile(filePath), kas to dara.

Pareizais rakstīšanas veids ir šāds:

Kad asp.net piedzīvo atmiņas pārpildi, vienkāršs veids, kā to risināt, ir nekavējoties atgūt lietojumprogrammu baseinu. Bet tas pilnībā neatrisināja problēmu.

Atmiņas pārpilde, veidojot attēla tipu (System.OutOfMemoryException)

Kļūdas kods: System.Drawing.Image myimg=System.Drawing.Image.FromFile(fails. Pilns vārds);

Izņēmumi, kas tiek izmesti, ja atvērts fails nav attēla fails:



MSDN: šī metode izmet OutOfMemoryException izņēmumu, ja failam nav derīga attēla formāta vai ja GDI+ neatbalsta faila pikseļu formātu.

Šāda neparasta informācija ir viegli maldinoša.

<processModel> Elements

Konfigurējiet ASP.NET procesa modeļa iestatījumus interneta informācijas pakalpojumu (IIS) tīmekļa serverī. Šo sadaļu var iestatīt tikai failā Machine.config <processModel> , un tā ietekmē visas ASP.NET lietojumprogrammas, kas darbojas serverī.

Brīdinājums Lai iegūtu informāciju par šo elementu, lūdzu, izlasiet sadaļu "Piezīmes".

Struktūras konfigurēšanas piemērs:

Ekseģēze

Pārvaldītā koda <processModel> konfigurācijas sistēma nenolasa konfigurācijas iestatījumus. Tā vietā to nolasa tieši nepārvaldītais DLL aspnet_isapi.dll. Izmaiņas šajā sadaļā stājas spēkā pēc IIS restartēšanas.

Ja instalējat ASP.NET domēna kontrollerī, jums jāveic īpašas darbības, pretējā gadījumā instalēšana nedarbosies. Plašāku informāciju skatiet sadaļā Atrodashttp://support.microsoft.comMicrosoft zināšanu bāzes rakstā CHS315158 "ASP.NET nevar izmantot noklusējuma ASPNET kontu domēna kontrolleros".

Kad ASP.NET darbojas IIS versijas 6 vietējā režīmā, tā izmanto IIS 6 procesa modeli un ignorē <processModel> sadaļas iestatījumus. Lai konfigurētu procesa identitātes, pārstrādes vai citas procesa modeļa vērtības, izmantojiet interneta pakalpojumu pārvaldnieka lietotāja interfeisu, lai konfigurētu IIS darba procesus savai lietojumprogrammai.

Laika vērtība ir formatēta kā "stundas:minūtes:sekundes". Ja bez kola ir dots tikai viens skaitlis, pieņem, ka vērtība ir minūtes; Tāpēc taimauts="4" ir ekvivalents taimautam="00:04:00".

Ja ASP.NET lietojumprogramma izraisa ASP.NET darba procesu (Aspnet_wp.exe operētājsistēmā Windows 2000 un Windows XP Professional un W3wp.exe sistēmā Windows Server 2003) restartēšanu un parāda kļūdas ziņojumu, kas norāda, ka restartēšana ir saistīta ar aizdomām par strupceļa stāvokli, tam ir jāpalielinās responseDeadlockInterval iestatījums.

Saglabājiet lietotājvārdus un paroles reģistrā

Saglabājiet lietotājvārdus un paroles reģistrā

Lai šifrētu lietotājvārdus un paroles un saglabātu tos reģistrā, iestatiet lietotājvārdu un paroli šādi.

userName="registry:HKLM\Software\AspNetProcess,Name"

password="registry:HKLM\Software\AspNetProcess,Pwd"

Virknes daļa, kas nāk pēc atslēgvārdu reģistra un pirms komata, norāda reģistra atslēgas nosaukumu, ko ASP.NET atver. Daļa pēc komata satur virknes vērtības nosaukumu, no kura ASP.NET nolasīs akreditācijas datus. Ir nepieciešami komati, un akreditācijas dati ir jāsaglabā HKLM konfigurācijas vienībā. Ja konfigurācija ir nepareizi formatēta, ASP.NET nesāks darba procesu un pēc tam parādīsies pašreizējā konta izveides kļūmes koda ceļā.

Akreditācijas datiem jābūt REG_BINARY formātā un jāsatur Windows API funkcijas CryptProtectData izsaukuma izvade. Šifrēšanas akreditācijas datus reģistrā var izveidot un saglabāt, izmantojot lietojumprogrammu ASP.NET Settings Registry Console (Aspnet_setreg.exe), kas šifrēšanas pabeigšanai izmanto CryptProtectData. Lai lejupielādētu Aspnet_setreg.exe un Visual C++ avota kodu un palīdzību, apmeklējiet vietniwww.asp.netun meklējiet "aspnet_setreg".

Konfigurējiet piekļuvi reģistra atslēgām, kurās tiek glabāti šifrēti akreditācijas dati, lai piekļuve būtu pieejama tikai administratoriem un SYSTEM. Tā kā reģistra atslēgu nolasīs ASP.NET process, kas darbojas kā SYSTEM, jums jāiestata šādas atļaujas:

Administrators:F

SYSTEM:F

RADĪTĀJA ĪPAŠNIEKS:F

ProcessAccount:R

Tas nodrošinās divas aizsardzības līnijas, lai aizsargātu datus:

ACL atļaujām ir nepieciešama piekļuve datiem ar administratora identitāti.
Uzbrucējam serverī būtu jāpalaiž kods (CryptUnprotectData), lai atgūtu konta akreditācijas datus.

piemērs

Šajā piemērā ir norādīti vairāki <processModel> konfigurācijas iestatījumi.

Šajā piemērā norādīts, ka šifrētais lietotājvārds un parole tiek glabāti reģistra lietotāja definētajā vienumā AspNetProcess.

Prasības

  • Iekļauts: <system.web>
  • Tīmekļa platforma: IIS 5.0, IIS 5.1, IIS 6.0
  • Konfigurācijas faili: Machine.config, Web.config
  • Konfigurācijas sadaļas apdarinātājs: System.Web.Configuration.ProcessModelConfigurationHandler


http://doc.51windows.net/iismmc/ ... essmodelelement.htm





Iepriekšējo:C# nosaka, vai augšupielādētais fails ir attēls, un novērš Trojas zirgu augšupielādi
Nākamo:C valodas e-grāmatu kolekcijas koplietošana
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com