🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.objects
Article #14483

Re: Wyrzucenie wyjątku, czy zwrócenie null?

#14483
From: Grzesiek G.
Date: Wed, 05 Apr 2006 14:22
74 lines
4534 bytes
Przemek Pokrywka napisał(a):
> Grzesiek G. napisał(a):
> 
>> Ale zadanie wykonywane przez program to jest coś, co jest opisane w 
>> jakimś dokumencie. Więc jeżeli nikt nie napisał, że sprawdzanie 
>> istnienia pliku jest częścią zadania, to (według przedstawionej przeze 
>> mnie teorii) jest sytuacją wyjątkową i można ją śmiało obsłużyć przez 
>> catch.
>>
>> Co do tezy, że klient nie interesuje się tym co robi w środku metoda 
>> się zgadzam. Jednak klienta interesuje jak robi. Więc jeśli robi zbyt 
>> wolno, bo przebieg programu jest sterowany wyjątkami, to klient może 
>> się zainteresować.
> 
> 
> Przedstawiona teoria jest dla mnie bardzo naciągana, z tego powodu, że 
> klient, jeśli mu zależy na wydajności, to napisze o tym wprost, i to w 
> odniesieniu do konkretnych przypadków użycia, a nie w postaci stwierdzeń 
> na temat obsługi wyjątków w ciałach poszczególnych metod.
> Wyjątki mogą stanowić problem wydajnościowy w marginalnych wypadkach i 
> tylko raport narzędzia typu profiler może stanowić przesłankę do 
> zastąpienia ich czymś innym. Byłbym bardzo zainteresowany usłyszeniem o 
> przypadku, w którym u kogoś to faktycznie obsługa wyjątków pod względem 
> wydajności stanowiła wąskie gardło systemu, przez co system nie spełniał 
> wymagań wydajnościowych postawionych mu przez klienta.

Aż dziw mnie bierze (i przyznam że zazdroszczę) :-), że się nie 
spotkałeś ani razu :-). Miałem do wykonania program walidujący i 
importujący plik csv do bazy danych. Wyjściem z nieudanej walidacji był 
raport błędów. Program był zrobiony tak, że przetwarzał plik do 
struktury obiektowej, którą obrabiał i zapisywał w bazie. Plik był 
poprawny, jeśli dawał się przekształcić do struktury obiektowej.

Niestety, rzeczywiste pliki okazały się fatalne. Tworzyło je pare osób w 
  MS Office i różnych Open Officach, także walidacja stała się ważna. Co 
gorsza za długo trwała (kilka minut), co bardzo złościło klienta. Była 
napisana poczętkowo w stylu:
try
{
	zmienna = decimal.Parse(napis);
	...
}
catch(InvalidFormatException exc)
{
	logger.log("Nie można skonwertować ...);
}

została przepisana na:
if(decimal.TryParse(napis)
{
	zmienna = decimal.Parse(Napis);
}
else
{
	logger.log("Nie można skonwertować ...);
}
Czas wykonania walidacji skrócił się do kilkudziesięciu sekund.


> Jeszcze raz za mistrzem Knuthem powtórzę, że "premature optimization is 
> the root of all evil"
> 

Z tą tezą też się zgadzam. Ale jeżeli np. w naszej aplikacji WWW strony 
ładują się u klienta kilkadziesiąt sekund, to nie czekamy na 
uzupełnienie specyfikacji uwagami o wydajności, tylko bierzemy się do 
pracy. Często wystarczy wyłączyć emula u użytkowników sieci klienta, ale 
czasami trzeba poprawić nasz soft.

Pozdrawiam

-- 
Grzegorz Gruza
Odpowiadając usuń "spamerom_nie." z adresu!!!
Technical Details
Message-ID: <e10jsb$9i1$1@atlantis.news.tpi.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mail
References: <e09c3r$lg3$1@news.onet.pl> <e09f0h$cis$1@news.task.gda.pl> <e09gjn$737$1@news.onet.pl> <e0b1re$bdc$1@news.onet.pl> <e0c8eh$ur8$1@news.onet.pl> <e0cd04$ljh$1@news.task.gda.pl> <e0ced6$f7g$1@news.onet.pl> <e0dabl$1sv$1@news.task.gda.pl> <87y7ytka81.fsf@qrnik.zagroda> <e0e8n1$ppe$1@news.task.gda.pl> <e0ef6i$h84$1@nemesis.news.tpi.pl> <e0ei45$p93$1@news.task.gda.pl> <e0ejpu$27n$1@news.onet.pl> <e0elnc$qp1$1@news.task.gda.pl> <e0elup$ad0$1@news.onet.pl> <e0gr7t$4h1$1@nemesis.news.tpi.pl> <e0k6te$c1b$1@news.onet.pl> <e0r5r0$9nk$1@nemesis.news.tpi.pl> <e0s2ub$brn$1@news.onet.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mail
From: "Grzesiek G." <gruza@spamerom_nie.priv4.onet.pl>
Newsgroups: pl.comp.objects
Subject: Re: Wyrzucenie wyjątku, czy
 zwrócenie null?
Date: Wed, 05 Apr 2006 16:22:50 +0200
Organization: tp.internet - http://www.tpi.pl/
Lines: 74
Message-ID: <e10jsb$9i1$1@atlantis.news.tpi.pl>
References: <e09c3r$lg3$1@news.onet.pl> <e09f0h$cis$1@news.task.gda.pl> <e09gjn$737$1@news.onet.pl> <e0b1re$bdc$1@news.onet.pl> <e0c8eh$ur8$1@news.onet.pl> <e0cd04$ljh$1@news.task.gda.pl> <e0ced6$f7g$1@news.onet.pl> <e0dabl$1sv$1@news.task.gda.pl> <87y7ytka81.fsf@qrnik.zagroda> <e0e8n1$ppe$1@news.task.gda.pl> <e0ef6i$h84$1@nemesis.news.tpi.pl> <e0ei45$p93$1@news.task.gda.pl> <e0ejpu$27n$1@news.onet.pl> <e0elnc$qp1$1@news.task.gda.pl> <e0elup$ad0$1@news.onet.pl> <e0gr7t$4h1$1@nemesis.news.tpi.pl> <e0k6te$c1b$1@news.onet.pl> <e0r5r0$9nk$1@nemesis.news.tpi.pl> <e0s2ub$brn$1@news.onet.pl>
NNTP-Posting-Host: hostr.bielbit.com.pl
Mime-Version: 1.0
X-Trace: atlantis.news.tpi.pl 1144246987 9793 195.117.206.2 (5 Apr 2006 14:23:07 GMT)
X-Complaints-To: usenet@tpi.pl
NNTP-Posting-Date: Wed, 5 Apr 2006 14:23:07 +0000 (UTC)
User-Agent: Mozilla Thunderbird 1.0.2 (Windows/20050317)
X-Accept-Language: pl, en-us, en
In-Reply-To: <e0s2ub$brn$1@news.onet.pl>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit