🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: alt.pl.comp.lang.csharp
17 messages
17 total messages Started by prorok Sat, 25 Dec 2010 13:43
Wydajność porównywania
#21936
Author: prorok
Date: Sat, 25 Dec 2010 13:43
4 lines
1107 bytes
Gdy porównujemy dwa obiekty wywoływana jest chyba metoda Equals. Czy 
jest również wywoływana dla typów wartościowych? Wtedy porównując
"if (n==5)"
musi być wywołana metoda co źle wpływa na wydajność.
Re: Wydajność porównywania
#21937
Author: Wiktor S.
Date: Sun, 26 Dec 2010 20:15
9 lines
1242 bytes
> Gdy porównujemy dwa obiekty wywoływana jest chyba metoda Equals. Czy
> jest również wywoływana dla typów wartościowych? Wtedy porównując
> "if (n==5)"
> musi być wywołana metoda co źle wpływa na wydajność.

Bez przesady, kompilator nie jest aż tak głupi...

-- 
Azarien
Re: Wydajność porównywania
#21938
Author: Wiktor S.
Date: Sun, 26 Dec 2010 20:16
13 lines
1319 bytes
> Gdy porównujemy dwa obiekty wywoływana jest chyba metoda Equals. Czy
> jest również wywoływana dla typów wartościowych? Wtedy porównując
> "if (n==5)"
> musi być wywołana metoda co źle wpływa na wydajność.

Bez przesady, kompilator nie jest aż tak głupi...

co by ta metoda zresztą miała zawierać, zagnieżdżone return x==y?



--
Azarien
Re: Wydajność porównywania
#21939
Author: Wiktor S.
Date: Sun, 26 Dec 2010 20:20
9 lines
1254 bytes
typy wbudowane (int, float itp.) są „magiczne”.

int rzeczywiście jest obiektem typu System.Int32, posiada metody, np. 
ToString() - ale, w przeciwieństwie do Javy, na poziomie kodu wykonywalnego 
to po prostu czterobajtowa liczba bez żadnych cudów.


-- 
Azarien
Re: Wydajnoœć porównywania
#21940
Author: Maciej Pilichowski
Date: Mon, 27 Dec 2010 06:01
19 lines
1586 bytes
On Sat, 25 Dec 2010 14:43:07 +0100, prorok <prorok@to.nie.adres>
wrote:

>Gdy porównujemy dwa obiekty wywoływana jest chyba metoda Equals. 

Nie jest.

>Czy 
>jest również wywoływana dla typów wartościowych? Wtedy porównując
>"if (n==5)"
>musi być wywołana metoda co źle wpływa na wydajność.

Znaczy sie wywolanie metody zle wplywa na wydajnosc, tiaa... A co
dobrze wplyneloby na wydajnosc?


-- 
Moja wyprzedaz wszystkiego: ksiazki, plyty, filmy.
http://www.garaz.pol.pl/
Re: Wydajnoœć porównywania
#21941
Author: 3P
Date: Mon, 27 Dec 2010 10:58
24 lines
1671 bytes
Dnia 27-12-2010 o 07:01:36 Maciej Pilichowski  
<Pilichowski.MaciejSkasujTo@gmail.com> napisał(a):

> On Sat, 25 Dec 2010 14:43:07 +0100, prorok <prorok@to.nie.adres>
> wrote:
>
>> Gdy porównujemy dwa obiekty wywoływana jest chyba metoda Equals.
>
> Nie jest.
To zależy jakie obiekty. Jeżeli przez równość obiektów rozumiemy  
posiadanie tych samych wartości to zazwyczaj jest.
string a = "aaa";
string b = "bbb";

if (a == b) // wywołanie Equals.
>
>> Czy
>> jest również wywoływana dla typów wartościowych? Wtedy porównując
>> "if (n==5)"
>> musi być wywołana metoda co źle wpływa na wydajność.
>
> Znaczy sie wywolanie metody zle wplywa na wydajnosc, tiaa... A co
> dobrze wplyneloby na wydajnosc?
Nie wywołanie metody.
Re: Wydajno?ć porównywania
#21942
Author: prorok
Date: Mon, 27 Dec 2010 13:27
13 lines
1601 bytes
W dniu 2010-12-27 11:58, 3P pisze:
> To zależy jakie obiekty. Jeżeli przez równość obiektów rozumiemy
> posiadanie tych samych wartości to zazwyczaj jest.
> string a = "aaa";
> string b = "bbb";
>
> if (a == b) // wywołanie Equals.

Czyli if (a == b) to to samo co a.Equals(b)
Przy okazji mam pilne pytanie: czy "abc" będzie uznane za równe "ABC" ? 
Sprawdziłem że ciąg musi być identyczny "abc" i "abc". A co gdy chcę 
porównywać nie patrząc na wielkość liter? Czy jest jakaś inna metoda, 
czy tez w stringu przestawia się jakiś tryb porównywania?
Re: Wydajno?ć porównywania
#21943
Author: 3P
Date: Mon, 27 Dec 2010 18:14
28 lines
2017 bytes
Dnia 27-12-2010 o 14:27:20 prorok <prorok@to.nie.adres> napisał(a):

> W dniu 2010-12-27 11:58, 3P pisze:
>> To zależy jakie obiekty. Jeżeli przez równość obiektów rozumiemy
>> posiadanie tych samych wartości to zazwyczaj jest.
>> string a = "aaa";
>> string b = "bbb";
>>
>> if (a == b) // wywołanie Equals.
>
> Czyli if (a == b) to to samo co a.Equals(b)
W przypadku stringów to będzie działać tak samo.
Ale jak piszesz swoje klasy to musisz ovveride'ować Equals i możesz także  
to samo zrobić z operator=
i zawołać z niego Equals.

> Przy okazji mam pilne pytanie: czy "abc" będzie uznane za równe "ABC" ?  
> Sprawdziłem że ciąg musi być identyczny "abc" i "abc". A co gdy chcę  
> porównywać nie patrząc na wielkość liter? Czy jest jakaś inna metoda,  
> czy tez w stringu przestawia się jakiś tryb porównywania?

1)
lewy.ToLower() == prawy.ToLower() (ew.ToUpper)

2)
Jakieś string.Compare przyjmujące paremetr StringComparison (czy jakoś  
tak) z wartością
IgnoreCase (intellisense ci pomoże)
Re: Wydajnoœć porównywania
#21948
Author: Maciej Pilichowski
Date: Tue, 28 Dec 2010 06:02
23 lines
1832 bytes
On Mon, 27 Dec 2010 11:58:27 +0100, 3P <nospam@serwer.pl> wrote:

>To zależy jakie obiekty. Jeżeli przez równo¶ć obiektów rozumiemy  
>posiadanie tych samych warto¶ci to zazwyczaj jest.
>string a = "aaa";
>string b = "bbb";
>
>if (a == b) // wywołanie Equals.

String to specyficzna klasa, jezeli ktos chce miec porownanie wartosci
to musi uzyc explicite Equals, inaczej porownaja sie same wskazniki.

>> Znaczy sie wywolanie metody zle wplywa na wydajnosc, tiaa... A co
>> dobrze wplyneloby na wydajnosc?
>Nie wywołanie metody.

W sumie racja, brak programu najlepiej wplywa na czas wykonania ;-)

milego dnia, hej

-- 
Moja wyprzedaz wszystkiego: ksiazki, plyty, filmy.
http://www.garaz.pol.pl/
Re: Wydajno?ć porównywania
#21944
Author: Maciej Pilichowski
Date: Tue, 28 Dec 2010 06:07
18 lines
1874 bytes
On Mon, 27 Dec 2010 19:14:29 +0100, 3P <nospam@serwer.pl> wrote:

>> Czyli if (a == b) to to samo co a.Equals(b)
>W przypadku stringów to będzie działać tak samo.
>Ale jak piszesz swoje klasy to musisz ovveride'ować Equals i możesz także  
>to samo zrobić z operator=
>i zawołać z niego Equals.

A pozniej koledzy z pracy Cie powiesza! To, ze mozna pisac zle nie
oznacza, ze nalezy to robic.

Jezeli chcesz miec porownanie wartosci to po prostu wywolaj metode,
ktora to robi, Equals. Nie zmieniaj natomiast znaczen operatorow.

milego dnia, hej
-- 
Moja wyprzedaz wszystkiego: ksiazki, plyty, filmy.
http://www.garaz.pol.pl/
Re: Wydajnoœć porównywania
#21949
Author: Łukasz 'Maly' Ostrowski
Date: Tue, 28 Dec 2010 07:49
21 lines
1617 bytes
On Tue, 28 Dec 2010 07:02:51 +0100, Maciej Pilichowski wrote:

> On Mon, 27 Dec 2010 11:58:27 +0100, 3P <nospam@serwer.pl> wrote:
> 
>>To zależy jakie obiekty. Jeżeli przez równo¶ć obiektów rozumiemy  
>>posiadanie tych samych warto¶ci to zazwyczaj jest.
>>string a = "aaa";
>>string b = "bbb";
>>
>>if (a == b) // wywołanie Equals.
> 
> String to specyficzna klasa, jezeli ktos chce miec porownanie wartosci
> to musi uzyc explicite Equals, inaczej porownaja sie same wskazniki.

Kpisz? Czy pomyliła się grupa z pl.comp.lang.java?

p.s. Pominę użycie sformułowania "wskaźniki" chwilą ciszy.

-- 
Pozdrawiam,
Łukasz 'Maly' Ostrowski.      http://l3v.eu/
Re: Wydajno?ć porównywania
#21947
Author: Łukasz 'Maly' Ostrowski
Date: Tue, 28 Dec 2010 07:53
19 lines
1634 bytes
On Mon, 27 Dec 2010 19:14:29 +0100, 3P wrote:
>> Przy okazji mam pilne pytanie: czy "abc" będzie uznane za równe "ABC" ?  
>> Sprawdziłem że ciąg musi być identyczny "abc" i "abc". A co gdy chcę  
>> porównywać nie patrząc na wielkość liter? Czy jest jakaś inna metoda,  
>> czy tez w stringu przestawia się jakiś tryb porównywania?
> 
> 1)
> lewy.ToLower() == prawy.ToLower() (ew.ToUpper)
> 
> 2)
> Jakieś string.Compare przyjmujące paremetr StringComparison (czy jakoś  
> tak) z wartością
> IgnoreCase (intellisense ci pomoże)

public bool Equals(string value, StringComparison comparisonType);

-- 
Pozdrawiam,
Łukasz 'Maly' Ostrowski.      http://l3v.eu/
Re: Wydajno?ć porównywania
#21945
Author: Łukasz 'Maly' Ostrowski
Date: Tue, 28 Dec 2010 07:58
23 lines
1814 bytes
On Tue, 28 Dec 2010 07:07:08 +0100, Maciej Pilichowski wrote:
> A pozniej koledzy z pracy Cie powiesza! To, ze mozna pisac zle nie
> oznacza, ze nalezy to robic.

http://msdn.microsoft.com/en-us/library/ms173147(v=vs.80).aspx

"Overriding operator == in non-immutable types is not recommended."

Jakieś źródła do tego co piszesz? Czy za ref'a bierzesz siebie
i wieszających kolegów z pracy ;-)?

> Jezeli chcesz miec porownanie wartosci to po prostu wywolaj metode,
> ktora to robi, Equals. Nie zmieniaj natomiast znaczen operatorow.

Jeżeli naturalnym jest porównanie by-value przez operator ==
to nie widze powodu żeby tego ne robić. A jeżeli ktoś chce
explicit porównanie referencji["wskaźników" ;p], to jest
object.ReferenceEquals().


-- 
Pozdrawiam,
Łukasz 'Maly' Ostrowski.      http://l3v.eu/
Re: Wydajno?ć porównywania
#21946
Author: Maciej Pilichowski
Date: Tue, 28 Dec 2010 08:05
32 lines
2384 bytes
On Tue, 28 Dec 2010 08:58:57 +0100, Łukasz 'Maly' Ostrowski
<maly@USUNnemo.pl> wrote:

>On Tue, 28 Dec 2010 07:07:08 +0100, Maciej Pilichowski wrote:
>> A pozniej koledzy z pracy Cie powiesza! To, ze mozna pisac zle nie
>> oznacza, ze nalezy to robic.
>
>http://msdn.microsoft.com/en-us/library/ms173147(v=vs.80).aspx
>
>"Overriding operator == in non-immutable types is not recommended."
>
>Jakieś źródła do tego co piszesz? Czy za ref'a bierzesz siebie
>i wieszających kolegów z pracy ;-)?

Przeciez wlasnie to zrodlo zacytowales.

>> Jezeli chcesz miec porownanie wartosci to po prostu wywolaj metode,
>> ktora to robi, Equals. Nie zmieniaj natomiast znaczen operatorow.
>
>Jeżeli naturalnym jest porównanie by-value przez operator ==
>to nie widze powodu żeby tego ne robić. A jeżeli ktoś chce
>explicit porównanie referencji["wskaźników" ;p], to jest
>object.ReferenceEquals().

Sluchaj, w swoim kodzie rob co chcesz, ja tylko mowie jak sie powinno
pisac i kod, ktory spotyka sie w zyciu jest wlasnie tak napisany jak
opisalem wyzej.

milego dnia, hej
-- 
Moja wyprzedaz wszystkiego: ksiazki, plyty, filmy.
http://www.garaz.pol.pl/
Re: Wydajno?ć porównywania
#21950
Author: Maciej Pilichowski
Date: Tue, 28 Dec 2010 08:07
36 lines
2133 bytes
On Tue, 28 Dec 2010 08:49:16 +0100, Łukasz 'Maly' Ostrowski
<maly@USUNnemo.pl> wrote:

>On Tue, 28 Dec 2010 07:02:51 +0100, Maciej Pilichowski wrote:
>
>> On Mon, 27 Dec 2010 11:58:27 +0100, 3P <nospam@serwer.pl> wrote:
>> 
>>>To zależy jakie obiekty. Jeżeli przez równo¶ć obiektów rozumiemy  
>>>posiadanie tych samych warto¶ci to zazwyczaj jest.
>>>string a = "aaa";
>>>string b = "bbb";
>>>
>>>if (a == b) // wywołanie Equals.
>> 
>> String to specyficzna klasa, jezeli ktos chce miec porownanie wartosci
>> to musi uzyc explicite Equals, inaczej porownaja sie same wskazniki.
>
>Kpisz? Czy pomyliła się grupa z pl.comp.lang.java?
>
>p.s. Pominę użycie sformułowania "wskaźniki" chwilą ciszy.

Nie zemdlej tylko.

public class Foo
{
public int x;
}

...

Foo a,b;
...
if (a==b) // co sie tu stanie?
-- 
Moja wyprzedaz wszystkiego: ksiazki, plyty, filmy.
http://www.garaz.pol.pl/
Re: Wydajno?ć porównywania
#21951
Author: Łukasz 'Maly' Ostrowski
Date: Tue, 28 Dec 2010 08:08
36 lines
2153 bytes
On Tue, 28 Dec 2010 09:07:05 +0100, Maciej Pilichowski wrote:
> On Tue, 28 Dec 2010 08:49:16 +0100, Łukasz 'Maly' Ostrowski
> <maly@USUNnemo.pl> wrote:
> 
>>On Tue, 28 Dec 2010 07:02:51 +0100, Maciej Pilichowski wrote:
>>
>>> On Mon, 27 Dec 2010 11:58:27 +0100, 3P <nospam@serwer.pl> wrote:
>>> 
>>>>To zależy jakie obiekty. Jeżeli przez równo¶ć obiektów rozumiemy  
>>>>posiadanie tych samych warto¶ci to zazwyczaj jest.
>>>>string a = "aaa";
>>>>string b = "bbb";
>>>>
>>>>if (a == b) // wywołanie Equals.
>>> 
>>> String to specyficzna klasa, jezeli ktos chce miec porownanie wartosci
>>> to musi uzyc explicite Equals, inaczej porownaja sie same wskazniki.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>
>>Kpisz? Czy pomyliła się grupa z pl.comp.lang.java?
>>
>>p.s. Pominę użycie sformułowania "wskaźniki" chwilą ciszy.
> 
> Nie zemdlej tylko.
> 
> public class Foo
> {
> public int x;
> }

Nie zemdlej tylko, forma gramatyczna tego co napisałeś sugerowała
że piszesz o string, a nie o jakiejś klasie.

-- 
Pozdrawiam,
Łukasz 'Maly' Ostrowski.      http://l3v.eu/
Re: Wydajno?ć porównywania
#21952
Author: Maciej Pilichowski
Date: Tue, 28 Dec 2010 08:12
16 lines
1728 bytes
On Tue, 28 Dec 2010 09:08:41 +0100, Łukasz 'Maly' Ostrowski
<maly@USUNnemo.pl> wrote:

>Nie zemdlej tylko, forma gramatyczna tego co napisałeś sugerowała
>że piszesz o string, a nie o jakiejś klasie.

Caly czas rozmowa jest o porownywaniu, odnioslem sie krotko do
stringa, iz jest on 'nietypowa" klasa (bo immutable).

Ok, jak widac, nieporozumienie slowne ;-)

milego dnia, hej

-- 
Moja wyprzedaz wszystkiego: ksiazki, plyty, filmy.
http://www.garaz.pol.pl/
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads