Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 | 4 | 5 |

 

  Вопрос: AgentFire- обратись к дортору неадекват Добавлено: 05.02.11 21:25  

Автор вопроса:  udn79

Ответить

  Ответы Всего ответов: 75  

Номер ответа: 61
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #61
Добавлено: 10.02.11 21:54
Ога, мне больше всего интересно кто такой был Unknown Lamer :D (Не я!)

Ответить

Номер ответа: 62
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #62 Добавлено: 11.02.11 00:40
mikityak это разве не Docal?

Ответить

Номер ответа: 63
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #63
Добавлено: 11.02.11 00:52
У микитяка много форм!

Ответить

Номер ответа: 64
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #64
Добавлено: 11.02.11 06:56
Берешь рефлектор и смотришь... Всё просто.
Сейчас возникла необходимость поглядеть, и вспомнил про этот топик.

  1. public sealed class String : IComparable, ICloneable, IConvertible, IComparable<string>, IEnumerable<char>, IEnumerable, IEquatable<string>
  2. {
  3.     public static bool operator ==(string a, string b)
  4.     {
  5.         return Equals(a, b);
  6.     }
  7.  
  8.     public static bool Equals(string a, string b)
  9.     {
  10.         return ((a == b) || (((a != null) && (b != null)) && EqualsHelper(a, b)));
  11.     }
  12.  
  13. //.....
  14. }
  15.  
  16.  
  17. [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail), SecuritySafeCritical]
  18. private static unsafe bool EqualsHelper(string strA, string strB)
  19. {
  20.     int length = strA.Length;
  21.     if (length != strB.Length)
  22.     {
  23.         return false;
  24.     }
  25.     fixed (char* chRef = &strA.m_firstChar)
  26.     {
  27.         fixed (char* chRef2 = &strB.m_firstChar)
  28.         {
  29.             char* chPtr = chRef;
  30.             char* chPtr2 = chRef2;
  31.             while (length >= 10)
  32.             {
  33.                 if ((((*(((int*) chPtr)) != *(((int*) chPtr2))) || (*(((int*) (chPtr + 2))) != *(((int*) (chPtr2 + 2))))) || ((*(((int*) (chPtr + 4))) != *(((int*) (chPtr2 + 4)))) || (*(((int*) (chPtr + 6))) != *(((int*) (chPtr2 + 6)))))) || (*(((int*) (chPtr + 8))) != *(((int*) (chPtr2 + 8)))))
  34.                 {
  35.                     break;
  36.                 }
  37.                 chPtr += 10;
  38.                 chPtr2 += 10;
  39.                 length -= 10;
  40.             }
  41.             while (length > 0)
  42.             {
  43.                 if (*(((int*) chPtr)) != *(((int*) chPtr2)))
  44.                 {
  45.                     break;
  46.                 }
  47.                 chPtr += 2;
  48.                 chPtr2 += 2;
  49.                 length -= 2;
  50.             }
  51.             return (length <= 0);
  52.         }
  53.     }
  54. }

Ответить

Номер ответа: 65
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #65 Добавлено: 11.02.11 16:09
  1.  
  2. private static unsafe bool IsMikityak(string strNickName)

?IsMikityak(LamerOnLine)
False
?IsMikityak(Morpheus)
False
?IsMikityak(Artyom)
False
Павел, будь добр, проверь остальных.

Ответить

Номер ответа: 66
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #66
Добавлено: 11.02.11 18:26
Mikityak'а соберёт GC при следующем проходе.

Ответить

Номер ответа: 67
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #67
Добавлено: 11.02.11 22:40
  1.   if ((((*(((int*) chPtr)) != *(((int*) chPtr2))) || (*(((int*) (chPtr + 2))) != *(((int*) (chPtr2 + 2))))) || ((*(((int*) (chPtr + 4))) != *(((int*) (chPtr2 + 4)))) || (*(((int*) (chPtr + 6))) != *(((int*) (chPtr2 + 6)))))) || (*(((int*) (chPtr + 8))) != *(((int*) (chPtr2 + 8)))))
  2.                 {
  3.                     break;
  4.                 }

Мой говнокод плачет в сторонке...

Ответить

Номер ответа: 68
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #68
Добавлено: 12.02.11 00:33
  1. *(((int*) chPtr))
зачем лишняя пара скобок?

Ответить

Номер ответа: 69
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #69 Добавлено: 12.02.11 02:15
Функция сравнения строк используется часто, следовательно, есть смысл ее оптимизировать, а сделать это проще всего с использвоанием unsafe кода, потому что он, как минимум, позволяет избавиться от проверок на предмет выхода за границы массива.

Winand пишет:
зачем лишняя пара скобок?

Рефлектор порой и не такой вытягивает. Нужно смотреть что там было в оригинальных исходниках, часть оригинальных исходников .NET Framework можно скачать где-то на microsoft.com

Ответить

Номер ответа: 70
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #70
Добавлено: 13.02.11 06:04
Мой говнокод плачет в сторонке...

А как бы сделал ты?

Ответить

Номер ответа: 71
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #71 Добавлено: 15.02.11 22:29
V&#946;&#208;U&#951;&#236;t пишет:
  if ((((*(((int*) chPtr)) != *(((int*) chPtr2))) || (*(((int*) (chPtr + 2))) != *(((int*) (chPtr2 + 2))))) || ((*(((int*) (chPtr + 4))) != *(((int*) (chPtr2 + 4)))) || (*(((int*) (chPtr + 6))) != *(((int*) (chPtr2 + 6)))))) || (*(((int*) (chPtr + 8))) != *(((int*) (chPtr2 + 8)))))

                {

                    break;

                }


Мой говнокод плачет в сторонке...

Это кстати не говнокод а прием оптимизации, именуемые "разворачиванием циклов". В данном случае кол-во выполняемых итераций будет в 10 раз меньше чем кол-во символов в строке, со всеми вытекающими. Смекаешь?

Ответить

Номер ответа: 72
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #72 Добавлено: 16.02.11 12:44
Мой говнокод плачет в сторонке...

имхо, это косяки рефлектора. реальный код наверняка выглядит иначе. Кто работает с рефлектором тот часто сталкивается с подобной ситуацией.

Ответить

Номер ответа: 73
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #73 Добавлено: 16.02.11 20:19
  1.                 // unroll the loop
  2. #if AMD64
  3.                 // for AMD64 bit platform we unroll by 12 and
  4.                 // check 3 qword at a time. This is less code
  5.                 // than the 32 bit case and is shorter
  6.                 // pathlength
  7.  
  8.                 while (length >= 12)
  9.                 {
  10.                     if (*(long*)a     != *(long*)b) break;
  11.                     if (*(long*)(a+4) != *(long*)(b+4)) break;
  12.                     if (*(long*)(a+8) != *(long*)(b+8)) break;
  13.                     a += 12; b += 12; length -= 12;
  14.                 }
  15. #else
  16.                 while (length >= 10)
  17.                 {
  18.                     if (*(int*)a != *(int*)b) break;
  19.                     if (*(int*)(a+2) != *(int*)(b+2)) break;
  20.                     if (*(int*)(a+4) != *(int*)(b+4)) break;
  21.                     if (*(int*)(a+6) != *(int*)(b+6)) break;
  22.                     if (*(int*)(a+8) != *(int*)(b+8)) break;
  23.                     a += 10; b += 10; length -= 10;
  24.                 }
  25. #endif

В оригинале почти так и есть.

Ответить

Номер ответа: 74
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #74
Добавлено: 16.02.11 21:15
Вот это уже почти неговнокод :D

Ответить

Номер ответа: 75
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #75 Добавлено: 16.02.11 21:16
можем оценить твою реализацию

Ответить

Страница: 1 | 2 | 3 | 4 | 5 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам