1. C# / Говнокод #2055

    +132.9

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    public string removeSpecialCharacters(string orig) {
                string rv;
    
                rv = orig.Replace("\\", " ");
                rv = rv.Replace("(", " ");
                rv = rv.Replace(")", " ");
                rv = rv.Replace("/", " ");
                rv = rv.Replace("-", " ");
                rv = rv.Replace(",", " ");
                rv = rv.Replace(">", " ");
                rv = rv.Replace("<", " ");
                rv = rv.Replace("-", " ");
                rv = rv.Replace("&", " ");
    
                rv = rv.Replace("'", "");
    
                rv = rv.Replace("\u2019", ""); // smart forward (possessive) quote.
    
                rv = rv.Replace(" ", "");
    
                rv = rv.Trim(' '); // Remove leading and trailing spaces.
    
                return (rv);
            }

    Запостил: fade, 27 Октября 2009

    Комментарии (19) RSS

    • да... тоскливо
      Ответить
    • боян..
      Ответить
    • В чем прикол?
      Ответить
      • http://msdn.microsoft.com/ru-ru/library/fk49wtc1.aspx
        "Примечание: Данный метод не изменяет значение текущего экземпляра. Вместо этого возвращается новая строка, в которой все вхождения oldValue заменяются на newValue."

        В этом говнокоде создается как минимум 14 (!!) копий исходной строки. И если вызывать его для большого текста или для большого листа строк - перфоманс приложения (асп.нет страницы) сделает торжественное сеппуку.
        Ответить
        • А разве сборщик мусора не будет автоматически удалять старую копию при присвоении новой на то же место? Памяти конечно хватит, но да, с быстродействием тут конечно ахтунг полный :D
          Ответить
          • Сборщик мусора вызывается, скажем..., когда сам захочет. И работы ему сразу будет много - за это время память можно изрядно подзасрать. Если это веб -приложение (а это как раз-таки оно :), то память - дорогое удовольствие. Сервер ведь может быть и перегружен. Ну и к быстродействию - выделение памяти под кучу объектов увеличит время работы метода. А значит увеличит общее время загрузки страницы.
            Вобщем ахтункъ, да хД
            Ответить
            • Не надо заниматься преждевременной оптимизацией.
              Код читается и всем понятно что он делает.
              В остальном коде наверняка есть более "узкие" места - их и надо доводить до приемлимой производительности. Профайлер в руки и вперед.
              Ответить
              • >Не надо заниматься преждевременной оптимизацией.

                Да, не надо.
                Надо изначально писать нормальный код.
                StringBuilder как раз для таких целей предназначен, и его использование никак не ухудшает производительность труда или читаемость.
                Про регэкспы уже молчу.
                Ответить
                • При этом заменять пробелом, чтобы его потом удалить...
                  Ответить
    • можно сделать еще говеннее
      return orig.Replace("\\", " ")..Replace("(", " ").Replace(")", " ").Replace("/", " ").Replace("-", " ") .......
      Ответить
      • Не, это не говёнее, потому что читабельность увеличивает (краткость-сестра-таланта).
        Ответить
      • тут тоже создается куча обьектов
        Ответить
    • а как сделать "правильно"? и что б быстро работало?
      вариант с регексом не предлагать, так как медленный.
      Ответить
      • Использовать StringBuilder и в нем производить операции
        Ответить
    • >rv = rv.Replace(" ", "");
      >rv = rv.Trim(' '); // чтобы наверняка
      Ответить
    • кстати пора уже ввести отрывание яиц рук за использование козлиной верблюжьей нотации там где не надо!
      Ответить
    • pro stringBuilder vse uje govorili...

      a ne cajetsea sto
      rv = rv.Replace("(", " ");
      .....................
      rv = rv.Replace(" ", "");
      ==
      rv = rv.Replace("(", ""); ???

      a ecio lu4e rv = rv.Replace("(", string.Empt);
      Ответить
    • И это вместо однократного создания стрингбилдера и одного прохода по строке на основе синглтона-хэшсета с "плохими" символами...
      Ужас.
      Ответить

    Добавить комментарий