» Poradna » Programy

ASP.NET MVC - po uploadu souboru zustane alokovana operacni pamet

 |   |  Microsoft Windows 8 Chrome 27.0.1453.94

Zdravím,vytvoril jsem si jednoduchou sajtu mvc (4) kde mam jen jednu stranku pro upload souboru, jedno tlacitko pro zvoleni konkretniho souboru a druhy primo pro upload, problem je, ze kdyz zvolim soubor a ten se zapise na disk, tak zustane alkovana operacni pamet ve velikosti uploadovanyho souboru, v task manageru se to jevi jako "Standby memory", jde o cache, zkousel jsem ruzne mazat a bez uspechu, v projektu jsem nic nemenil krome nasledujiciho(uz fakt nevim kde by mohl byt problem tak jsem zacal uplne nanovo projekt)Screen task manageru : http://imageshack.us/photo/my-images/801/taskm... Web config :"httpRuntime targetFramework="4.5" maxRequestLength="2147483647" /""security requestFiltering requestLimits maxAllowedContentLength="2147483647" / /requestFiltering/security"ve view :"form action="Home/Upload" method="post" enctype="multipart/form-data" label for="file">Filename:</label input type="file" name="file" id="file" / input type="submit" //forma v controlleru : [HttpPost] public ActionResult Upload(HttpPostedFileBase file) { if (file.ContentLength > 0) { var fileName = Path.GetFileName(file.FileName); var path = Path.Combine(Server.MapPath("~/App_Data/"), fileName); file.SaveAs(path); } return RedirectToAction("Index"); }

Odpovědi na otázku

 |   |  Microsoft Windows 7 Chrome 27.0.1453.94

A čemu to vadí?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 8 Chrome 27.0.1453.94

Dalsimu zpracovani dat, konkretne : potrebuju data zpracovat aby je bylo mozne poslat na WCF sluzbu, jenze kdyz chci prevest data do pole bajtu, tak to opet vyzaduje misto v pameti, jenze to nema = problem, ledaze by slo nejak vynutit prostor v pameti, takhle vypada moje metoda pro upload (puvodni) : [HttpPost] public ActionResult Index(HttpPostedFileBase file) { using (UploadService.UploadClient upload = new UploadService.UploadClient()) { UploadService.UploadInfo info = new UploadService.UploadInfo(); byte[] buffer = new byte[file.ContentLength]; file.InputStream.Read(buffer, 0, file.ContentLength); info.FileData = buffer; info.FileName = file.FileName; info.ContentLength = file.ContentLength; info.ContentType = file.ContentType; upload.UploadFile(info); } return RedirectToAction("Index"); }

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 8 Chrome 27.0.1453.94

Dalsimu zpracovani dat, konkretne : potrebuju data zpracovat aby je bylo mozne poslat na WCF sluzbu, jenze kdyz chci prevest data do pole bajtu, tak to opet vyzaduje misto v pameti, jenze to nema = problem, ledaze by slo nejak vynutit prostor v pameti, takhle vypada moje metoda pro upload (puvodni) : [HttpPost] public ActionResult Index(HttpPostedFileBase file) { using (UploadService.UploadClient upload = new UploadService.UploadClient()) { UploadService.UploadInfo info = new UploadService.UploadInfo(); byte[] buffer = new byte[file.ContentLength]; file.InputStream.Read(buffer, 0, file.ContentLength); info.FileData = buffer; info.FileName = file.FileName; info.ContentLength = file.ContentLength; info.ContentType = file.ContentType; upload.UploadFile(info); } return RedirectToAction("Index"); }

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 27.0.1453.94

Ten InputStream by to po skončení chtělo zavřít.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 8 Chrome 27.0.1453.94

No, nehlede na uzavreni inputstreamu ta cache roste, ale ted jsem to zkousel a problem zustava (resp. nezaznamenal jsem nejaky vyrazny pokles pameti), jeste abych to upresnil, problem nastava na 2 mistech podle dostupnosti pameti : 1)byte[] buffer = new byte[file.ContentLength];2)upload.UploadFile(info);kdyz uz je cache pres celou volnou pamet = "Exception of type 'System.OutOfMemoryException' was thrown."- to znamena ze momentalne potrebuju aby bylo misto v pameti na 3x velikost souboru, jako idelani reseni by bylo, kdyby se data zapisovala rovnou na disk misto do pameti (napriklad kdybych mel SSD)

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 27.0.1453.94

Pokud posilas pres WCF vetsi soubory, je efektivnejsi pouzit streamy misto bufferu.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 8 Chrome 27.0.1453.94

diky, to zni rozumne, jestli to funguje tak, ze po precteni casti souboru data hned odesle po nejakejch segmentech, tak by to bylo supr, tzn ze by bylo potreba jen zlomek pameti, nebo to funguje jinak? ale timhle si mi pridal vitr do plachet :) hned mam lepsi naladu :D protoze pri predstave ze jeden klient zahlti server jednim uploadem, to by asi moc nefungovalo

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 27.0.1453.94

Přesně tak. Posílají se jen malé bloky dat (tzv. chunky), třeba po 64Kbytech. U WCF to funguje tak, že klient službě předá objekt streamu a služba už jen na tomto objektu vola Read.Pro více informací mrkni třeba sem:http://www.codeproject.com/Articles/166763/WCF-Strea...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 27.0.1453.94

Diky, zkusil jsem to podle toho codeprojectu a je to funkcni , akorat kdyz je to ted streamovany, nepodarilo se mi najit zadnej sample jak by slo udelat asynchronni uploadovani resp. chapu to tak, ze to v podstate probiha stejne, ale nevygoogloval jsem jak zpetne podat asynchronne uzivateli info o stavu, resp. lze nejak nakonfigurovat streamujici metodu aby zpetne odesilala treba stav kolik se toho uz odeslalo, nebo treba jen bool hodnotu, ze bylo uspesne odeslano aby se na strane aplikace pocitalo celkovy prenos? Nekde jsem se docetl ze na takovy reseni je potreba vytvorit dalsi vlakno v wcf ktery bude zpetne data odesilat, myslim si, ze by melo existovat nejaky peknejsi a jednodussi reseni.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Opera 9.80
 |   |  Microsoft Windows 7 Chrome 27.0.1453.94

Vytvoříš si vlastní třídu odvozenou od Stream, kde přetížíš metodu Read(). Vytvoříš si tam event, který budeš v přetížené metodě volat v nějakém intervalu. V klientovi si k tomu eventu zaregistruješ nějaký svůj callback - ten se ti bude pravidelně volat - na ten pak můžeš navěsit nějaký progress. Více třeba zde:http://www.codeproject.com/Articles/20364/Progress-I...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 8 Chrome 27.0.1453.94

konecne jsem se dostal k tomu abych poradne vyzkousel jak to funguje a funguje to naprosto perfektne, teda je super, ze uz neni pri vstupu souboru potreba alokovat mnozstvi pameti na celej soubor ani pri prubehu streamu, nicmene jsem dosel k zjisteni, ze i tak pri streamovani je potreba nejaka (nezanedbatelna) pamet + cpu, na mym pc jde o cca 10-20% cpu + 0.5GB ram (vicemene, navic po nekolika testech treba i ta ram spadla na naprosty minimum) na necely 2GB soubor cca jen tak od oka, ale to uz nemusi bejt zadnej problem, podle toho, ktera cast reseni to vyuziva, logicky by to podle me mely byt zarizeni, mezi kteryma se streamuje tzn klient + server (wcf), web jako prostrednik by na tom mel byt lip, nebo co myslite vy? Zkousel jsem streamovani hodit do konzolovy aplikace a poslat soubor na lokalni wcf aplikaci, abych mohl v task manageru oddelit klienta od wcf aplikace, z toho mi vyslo ze procesor zralo wcf (iis), konzolova aplikace jela na max par %, ale nepodarilo se mi zjistit jak je to s operacni pameti, rad bych v tomhle mel jistotu, kdyz uz na tom budu dal stavet. To, proc to takhle resim je, ze mam nekolik serveru, ktery bych rad mel spis jako uloziste a mel separatne oddeleny web aplikaci umistenou na normalnim web hostingu (kde je i vetsi jistota, ze pobezi dal), ale hosting kterej momentalne pouzivam na web4u ma garantovano cca 200mb ram, a to uz je sakra rozdil od serveru kde mam na kazdym 16GB, nebo co me napadlo je, ze bych mel na kazdym serveru klientskou aplikaci a nejak pristup k jednolovym serverum rozhazoval mezi uzivatele aplikaci na hostingu, jo jen jeste pro upresneni, to proc mam hosting je, ze jde o levnejsi zalezitost nez umistit do data centra server a potrebuju mit centralni db, u ktere bude velka pravdepodobnost ze jen tak nespadne, precejen hosting nejaky technicky problemy resi sam. Diky za vsechny rady, Jan

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: 10, File, Filename, Form, Label, Task




Určitě si přečtěte

Astronomové objevili daleko za Plutem objekt s extrémní dráhou. Může ukazovat na existenci planety Devět

Astronomové objevili daleko za Plutem objekt s extrémní dráhou. Může ukazovat na existenci planety Devět

** Astronomové objevili daleko za Neptunem těleso 2015 TG387 ** Okolo Slunce se pohybuje po extrémně protáhlé dráze ** Jeho dráha může ukazovat na existenci planety Devět

Petr Kubala | 10

Externí SSD se může hodit. Je rychlé, malé zvenku, velké uvnitř a cena už se snese

Externí SSD se může hodit. Je rychlé, malé zvenku, velké uvnitř a cena už se snese

** Vyzkoušeli jsme rychlé externí SSD Samsung T5 ** Externí SSD je lepší než flešky i velké plotnové disky, většímu rozšíření doposud bránila především cena ** Samsung T5 zvládne i chytré šifrování a připojení k mobilu

David Polesný | 27

PortraitPro: Vyzkoušeli jsme program, který prý udělá z každé „žáby“ krasavici

PortraitPro: Vyzkoušeli jsme program, který prý udělá z každé „žáby“ krasavici

** V digitálním světě nemůžete věřit všemu ** Nová generace 3D fotoeditorů zvládne divy ** Vyzkoušeli jsme PortraitPro, který vám změní i kontaktní čočky

Jakub Čížek | 10

Osudová havárie Concordu: Před 18 lety přišel konec nadzvukových dopravních letadel

Osudová havárie Concordu: Před 18 lety přišel konec nadzvukových dopravních letadel

** Concorde byl nejrychlejším dopravním letadlem ** Atlantik dokázal přeletět za cca 3 až 3,5 hodiny ** Před osmnácti lety tragická havárie provoz těchto letadel prakticky ukončila

David Polesný, Jiří Černý | 37

Američtí mariňáci si tisknou kasárna z betonu na 3D tiskárně

Američtí mariňáci si tisknou kasárna z betonu na 3D tiskárně

** Americká námořní pěchota nedávno představila 3D tištěná kasárna pro vojáky ** Ty jim tiskne velká 3D tiskárna na beton ** Výsledkem je solidní obytný prostor, který je slušně chráněný před nepřátelskou palbou

Stanislav Mihulka | 18

Praktické vychytávky, které si chcete doinstalovat do Windows

Praktické vychytávky, které si chcete doinstalovat do Windows

** Pokud vás nudí vzhled nabídky Start, snadno jej můžete změnit. ** Stejně tak existují programy na přidání záložek do programů. ** Spokojit se ani nemusíte se základním ovládáním hlasitosti.

Vladislav Kluska | 45

Photolemur 3: Prostě do něj přetáhnete fotky a začne se dít magie. Tedy údajně...

Photolemur 3: Prostě do něj přetáhnete fotky a začne se dít magie. Tedy údajně...

** Je lepší nabušený Photoshop, nebo program s jedním tlačítkem? ** Photolemur si myslí to druhé ** Tento fotoeditor neumí skoro nic, a přitom (skoro) všechno

Jakub Čížek | 19

Na Zemi je nejtepleji za posledních více než 100 tisíc let. Co nám hrozí?

Na Zemi je nejtepleji za posledních více než 100 tisíc let. Co nám hrozí?

** Letošní červenec byl třetím nejteplejším měsícem od roku 1880 ** Teplota naší planety roste raketovým tempem ** Co lidstvu hrozí v období, které v minulosti nemá obdoby?

Karel Kilián | 70


Aktuální číslo časopisu Computer

Jak vytvořit a spravovat vlastní web

Velký test herních klávesnic a DVB-T2 tunerů

Vše o formátu RAW

Vybíráme nejlepší základní desku