Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
30.08.2013, 16:09
|
|||
---|---|---|---|
|
|||
Оптимизация функции замены строки |
|||
#18+
Всем привет! Требуется из csv строки удалить ненужны значения. Функция работает, но для больших объемов данных производительность низкая. Профайлеру не нравиться эта строка input[i] == delimiter. Как можно оптимизировать код? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
02.09.2013, 07:05
|
|||
---|---|---|---|
|
|||
Оптимизация функции замены строки |
|||
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
|
02.09.2013, 08:40
|
|||
---|---|---|---|
Оптимизация функции замены строки |
|||
#18+
Попробуй использовать рег. выражения. Возможно, что будет работать быстрее ... |
|||
:
Нравится:
Не нравится:
|
|||
|
02.09.2013, 12:15
|
|||
---|---|---|---|
|
|||
Оптимизация функции замены строки |
|||
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
|
02.09.2013, 12:15
|
|||
---|---|---|---|
|
|||
Оптимизация функции замены строки |
|||
#18+
ErmakПопробуй использовать рег. выражения. Возможно, что будет работать быстрее Рег выражения по определению медленные. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
02.09.2013, 13:00
|
|||
---|---|---|---|
|
|||
Оптимизация функции замены строки |
|||
#18+
Testor1Alex KuznetsovTestor1, String.IndexOf ? Он медленееТогда работайте со строкой как с массивом Char... Т.е. откажитесь от SubString... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
02.09.2013, 13:26
|
|||
---|---|---|---|
|
|||
Оптимизация функции замены строки |
|||
#18+
Alex KuznetsovTestor1пропущено... Он медленееТогда работайте со строкой как с массивом Char... Т.е. откажитесь от SubString... SubString и так работает со строкой, как с массивом. Он сразу переходит к символу, по индексу, указанному в первом параметре. Ни каких накладных расходов у него быть не должно (ну, т.е. он не бежит по всей строке и ничего в ней не ищет) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
02.09.2013, 14:38
|
|||
---|---|---|---|
Оптимизация функции замены строки |
|||
#18+
Testor1Как можно оптимизировать код? При создании стрингбилдера указать размер, достаточный для вмещения данных: new StringBuilder(1000) Если метод вызывается неоднократно, то стрингбилдер сделать полем класса, а в методе лишь очищать его: output.Clear(); String Delimeter = delimiter.ToString(); - это зачем? Просмотреть код, и выкинуть лишнее. input.Substring(startPosition, i-startPosition+1).ToString() - аналогично, зачем ToString()? Убрать. В данном случае будут проверки на вхождение индекса в границы: Код: c# 1. 2.
Если переписать так: Код: c# 1.
то компилятор может выкинуть такие проверки. output.Append(@"|"); - имхо, лучше будет написать output.Append('|'); то есть добавлять символ, а не строку - должно быть быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
02.09.2013, 15:26
|
|||
---|---|---|---|
|
|||
Оптимизация функции замены строки |
|||
#18+
TamozhnyaAlex Kuznetsovпропущено... Тогда работайте со строкой как с массивом Char... Т.е. откажитесь от SubString... SubString и так работает со строкой, как с массивом. Он сразу переходит к символу, по индексу, указанному в первом параметре. Ни каких накладных расходов у него быть не должно (ну, т.е. он не бежит по всей строке и ничего в ней не ищет)А его вызовы не дают накладных расходов? И его внутренние проверки на выход за пределы массива тоже ни на что не влияют? Я же написал отказаться от вызова... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
03.09.2013, 20:43
|
|||
---|---|---|---|
|
|||
Оптимизация функции замены строки |
|||
#18+
Testor1, а если вот так? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
03.09.2013, 21:10
|
|||
---|---|---|---|
|
|||
Оптимизация функции замены строки |
|||
#18+
Testor1, ну а можно ещё и вот так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70.
Результаты весьма интересные... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
03.09.2013, 21:17
|
|||
---|---|---|---|
|
|||
Оптимизация функции замены строки |
|||
#18+
Извините, нагавнял в коде , надо было так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
03.09.2013, 21:39
|
|||
---|---|---|---|
|
|||
Оптимизация функции замены строки |
|||
#18+
Блин, под вечер что-то я с тестовыми данными напутал. Вот исправленная версия, в которой больше тестовых данных и итераций: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80.
как видно из тестов, даже не смотря на то, что String.Split, согласно справке является медленной функцией, в таких вещах она гораздо выгодней к использованию. Есть конечно вариант отказаться от использования string в качестве входного параметра в функцию и передавать ссылку на массив char. Тогда должна по идее отработать быстрее первая версия... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
03.09.2013, 21:57
|
|||
---|---|---|---|
|
|||
Оптимизация функции замены строки |
|||
#18+
Как и ожидал, при смене входного параметра со String на ref char[] прирост в скорости есть, даже по сравнению с версией со Split. Вот версия программы: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117.
Ну, и конечно же результат: ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=20&mobile=1&tid=1404116]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
70ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 333ms |
total: | 491ms |
0 / 0 |