|
|
|
Оптимизация функции замены строки
|
|||
|---|---|---|---|
|
#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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2013, 16:09:17 |
|
||
|
Оптимизация функции замены строки
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 07:05:07 |
|
||
|
Оптимизация функции замены строки
|
|||
|---|---|---|---|
|
#18+
Попробуй использовать рег. выражения. Возможно, что будет работать быстрее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 08:40:54 |
|
||
|
Оптимизация функции замены строки
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 12:15:02 |
|
||
|
Оптимизация функции замены строки
|
|||
|---|---|---|---|
|
#18+
ErmakПопробуй использовать рег. выражения. Возможно, что будет работать быстрее Рег выражения по определению медленные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 12:15:33 |
|
||
|
Оптимизация функции замены строки
|
|||
|---|---|---|---|
|
#18+
Testor1Alex KuznetsovTestor1, String.IndexOf ? Он медленееТогда работайте со строкой как с массивом Char... Т.е. откажитесь от SubString... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 13:00:21 |
|
||
|
Оптимизация функции замены строки
|
|||
|---|---|---|---|
|
#18+
Alex KuznetsovTestor1пропущено... Он медленееТогда работайте со строкой как с массивом Char... Т.е. откажитесь от SubString... SubString и так работает со строкой, как с массивом. Он сразу переходит к символу, по индексу, указанному в первом параметре. Ни каких накладных расходов у него быть не должно (ну, т.е. он не бежит по всей строке и ничего в ней не ищет) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 13:26:27 |
|
||
|
Оптимизация функции замены строки
|
|||
|---|---|---|---|
|
#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, 14:38:34 |
|
||
|
Оптимизация функции замены строки
|
|||
|---|---|---|---|
|
#18+
TamozhnyaAlex Kuznetsovпропущено... Тогда работайте со строкой как с массивом Char... Т.е. откажитесь от SubString... SubString и так работает со строкой, как с массивом. Он сразу переходит к символу, по индексу, указанному в первом параметре. Ни каких накладных расходов у него быть не должно (ну, т.е. он не бежит по всей строке и ничего в ней не ищет)А его вызовы не дают накладных расходов? И его внутренние проверки на выход за пределы массива тоже ни на что не влияют? Я же написал отказаться от вызова... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 15:26:23 |
|
||
|
Оптимизация функции замены строки
|
|||
|---|---|---|---|
|
#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, 20:43:38 |
|
||
|
Оптимизация функции замены строки
|
|||
|---|---|---|---|
|
#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:10:36 |
|
||
|
Оптимизация функции замены строки
|
|||
|---|---|---|---|
|
#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:17:49 |
|
||
|
Оптимизация функции замены строки
|
|||
|---|---|---|---|
|
#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:39:08 |
|
||
|
Оптимизация функции замены строки
|
|||
|---|---|---|---|
|
#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. Ну, и конечно же результат: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2013, 21:57:22 |
|
||
|
|

start [/forum/search_topic.php?author=frech&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
4ms |
get forum list: |
16ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
29ms |
get topic data: |
9ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 3174ms |
| total: | 3314ms |

| 0 / 0 |
