Професионална програма
Loading...
+ Нов въпрос
kasskata avatar kasskata 492 Точки

[Exam Problems] КПК - Примерен изпит "Phonebook" девети тест

Добре, реших задачата, рефакторирах колкото мога повече, перформанса ми се вдигна много( 0.955 s), но 9тия тест ми гърми за памет(53.71 MB). А по-странното е, че 10тия е 26000 реда и не гърми,
а 9тия тест е 18000 реда и гърми.

Има ли някой, който се е преборил с този проблем с паметта, за да ми помогне. Ако Влади ми отговори (или някой от SoftUni)ще съм му благодарен. 

4
C# OOP Advanced 15/01/2015 11:18:16
HPetrov avatar HPetrov 822 Точки

Паметта, която заема не е от броя редове а по-скоро от структурите от данни, който се ползват. Признавам, че не съм го погледнал по-подробно, но си мисля, че може би има някоя колекция от неща (класове, nested колекции?), която става много голяма на този тест и прескача лимита на памет.

2
presian avatar presian 223 Точки

Аз имам малко по различне въпрос -> коя гршка излиза първо за време или за памет. Аз го докарвам до 50т. до момента(1-5), и следващите тестове до 10 са със часовници. И съответно това, че са часовници означава ли, че иначе работят коректно?

1
ttitto avatar ttitto 1153 Точки

Първо излиза грешката за време, след това тази по памет (реф. Владо К. на подготовката за изпит)

Това, че сега ти дава грешка за време не означава, че като я оптимизираш, няма да ти даде грешка за памет.

1
ttitto avatar ttitto 1153 Точки

Още не съм започнал да я пиша задачата, но прави впечатление, че ентритата се пазят едновременно в две колекции - OrderedSet и Dictionary по различен начин. Незнам колко е добра идеята да се премахне едната от тях за да се спести памет, което пък ще доведе до допълнителна обработка на данните при определена ситуация и забавяне в изпълнението.

0
presian avatar presian 223 Точки

Аз сега за пробрата пуснах авторското решение и то си гърми за памет на 9 тест. Просто явно трябва да се вдигне лимита на паметта.

0
petrovaliev95 avatar petrovaliev95 358 Точки

При мен същия проблем с паметта на 9-ти тест. 

Използвано време: 0.642 s
Използвана памет: 52.41 MB
0
presian avatar presian 223 Точки

Ей сега субмитнах и видях, че ZvetanIG го е докрал до 100!

Значи има вариянт! 

Деразйте....

1
15/01/2015 14:47:03
ZvetanIG avatar ZvetanIG 907 Точки

Сравнително лесно постигнах 100.  Пренаписах си само мейн класа, като махнах рекурсията и  използвах switch.  Cmd метода го разбих на  3 три отделни метода за всяка команда.  Това е основното, което направих и задачата тръгна с 50 точки в джъджа.  5 теста гърмяха за време.  

Смених репозиторито с по-сложното, Това с многото речници и тем подобниlaughing (явно е по-бързото) и всичко заспа.

По принцип имайте предвид, че рекурсиите гълтат памет.  Съветвам ви да я махнете.

3
15/01/2015 15:46:06
kasskata avatar kasskata 492 Точки

и аз съм направил същото за другите 50 като теб, но продължава да гърми на предпоследния 

тест. Не мога да разбера кое го препълва толкова. мисля да го преработя да работи само с един сортСет

 

0
petrovaliev95 avatar petrovaliev95 358 Точки

Пробвах вече няма смисъл. Гърми за време ...

П.С. Аз немога да разбера сега защо да трием променливи и да се чудим от къде да спестим памет. Нали е КПК, нали трябва да пишем по качествен и самодокументиращ се код. За мен не е яко да виждам в кода си примерно "params[0]".

0
15/01/2015 16:59:18
arsoman avatar arsoman 419 Точки

Здравей, може ли да кажеш кое с кое смени, защото от 2 часа все ми дава 50/100 заради време 3 сек.? Благодаря!

0
yavor2000 avatar yavor2000 114 Точки

След доста мислене и оптимизиране не успях да сляза под 50мб на 9-ти тест и ми гърмеше. Този тест няма повече инпут телефони от другите тестове, значи не би трябвало да се вдига паметта толкова много.

Решението се появи като си зададох въпроса "защо печатаното в конзолата ще вдига паметта?" Отговора е че не вдига, но оригиналното решение не печата директно в конзолата.

Мисля че подсказах достатъчно :)
ако не - ще пиша отново но утре

2
petrovaliev95 avatar petrovaliev95 358 Точки

А оригиналното (авторското) решение минава ли 9-ти тест ?

0
presian avatar presian 223 Точки

 petrovaliev95 - не го минава пробвах. Решението на проблема от Явор ми се струва доста добро премахваш един огромна лог променлива реално. Мисля да пробвам малко по-късно да видя дали ще се оправи и при мен! 

 

Малка редакция: Не съм сигурен, че Явор имаше това предвид, но променяйки логера всичко заспа. Вместо да се логва резултата от командите и да ги принтира след енд командата, се логват командите и на енд се пуска колекцията от команди да се изпълни -> резултата е е осезаемо по бавно изпълнение, но паметта е почти три пъти по малко:

преди:

Памет: 52.22 MB 
Време: 0.944 s

след:

Памет: 21.21 MB 
Време: 1.781 s

2
16/01/2015 14:28:34
yavor2000 avatar yavor2000 114 Точки

Точно така - големината на output става над 35мб - и затова гърми теста по памет. Не съм пробвал авторовото решение.

3
borislavml avatar borislavml 368 Точки

За да не отварям нова тема, ще пиша тук въпреки, че не е много релевантен въпроса. Решавам здачата Catalog of free content където има три енумерации набити в един enum.cs файл. Според вас от гледна точка на КПК как е удачно да се постъпи в случая. Търсих инфо в нета, но не намерих точно това което ме интересува, в лекциите от курса също не помня някъде да е засегната тази тема. В смисъл енумерациите трябва ли да са в отделна папка в проекта примерно Enums, както интерфейсите са в папка Contracts, и трябва ли всяка енумерация да е в отделен .cs файл, в случая три енумеруации  в три отделни файла. На мен това ми изглежда най-чисто и без да се колебая бих го направил така, но знам ли какви са конвенциите. Някой по-наясно да сподели!

0
ttitto avatar ttitto 1153 Точки

Със сигурност всяка енумерация е в отделен клас. Дали да са всички събрани в отделна папка - по скоро не мисля. Структурата на папките трябва да отговаря на структурата на неймспейсите.

1
borislavml avatar borislavml 368 Точки

Набутах ги в отделни файлове и за "по-красиво" в една папка Enums, по мое усмотрение. Има смисъл в това което казваш за неймспейсите, но си мисля, че и в двата случая(в папка или не) няма да има санкции на изпита, ако има такъв рефакторинг.smile

0
RoYaL avatar RoYaL Trainer 6847 Точки

Идеята е, че всичко трябва да е толкова loose couple-нато, че едва ли не, ако го отделиш от проекта и го сложши в друг, да можеш да го ползваш. Ако набиеш енумерациите в папка енумс и съответния неймспейс, това означав, че имаш още една папка и неймспейс за прекопиране, когато искаш да ги преместиш в друг проект :) би трябвало да си вървят с модула, за който са. Мое мнение :)

3
arsoman avatar arsoman 419 Точки

Колеги, някой срещал ли е проблема да пусне rar-архив от 489 кб и да му даде "файла е твърде голям"?

Същото е и със zip-файл...

0
16/01/2015 19:01:53
milen_vm avatar milen_vm 68 Точки

Махаш ли bin и obj папките? Те не са нужни. Без тях при мен е 7кб.

1
yavor2000 avatar yavor2000 114 Точки

да. проблема е че архива е твърде голям. архивирай само това (около 18кб не архивирано):
/properties

/drugi_tvoi_papki

App.config

packages.config

Phonebook.cs

PhonebookEntry.cs

PhonebookRepository.cs

Phonebook.cproj

Phonebook.psess

SlowPhonebookRepository.cs

2
arsoman avatar arsoman 419 Точки

Супер, сега мина, не вярвах, че под 1 МБ ще прави проблем. Благодаря!

1