Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
3 / 3 / 1
Регистрация: 27.06.2011
Сообщений: 101

Как ускорить преобразование ToString?

17.03.2013, 12:12. Показов 2879. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Можно ли как-то ускорить преобразование .ToString()? Занимает ну оооочень много времени. Нужно записать большое число в файл. Может как-то с помощью массива байтов? Спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.03.2013, 12:12
Ответы с готовыми решениями:

При вычислении выражения ++i.ToString() сначала вычисляется ToString(), а потом ++
При вычислении выражения ++i.ToString() сначала вычисляется ToString(), а потом ++. Соответственно, это не работает, работает...

Разница между string.Concat(x,y) и x.ToString()+y.ToString()
Вроде как одно и то же, но дает разные результаты в операции поиска палиндромов. К примеру, взять число 1010: ...

Преобразование изображения: ускорить работу кода
Добрый. Как можно ускорить следующий код? Мне необходимо конвертировать определенный цвет в пространстве RGB в пространство LAB. Я хочу...

23
CEO
Эксперт С++
 Аватар для Alligieri
2258 / 1248 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
17.03.2013, 13:26
west0293, вы бы хоть код привели, я так понимаю используется не стандартный вариант ToString()?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
17.03.2013, 15:08
Разумеется можно.
Достаточно переопределить метод ToString и сделать там более быстрое приведение.
1
3 / 3 / 1
Регистрация: 27.06.2011
Сообщений: 101
17.03.2013, 15:43  [ТС]
Разумеется можно.
Достаточно переопределить метод ToString и сделать там более быстрое приведение.
Не подскажете как? И насколько большой выигрыш в скорости можно получить? Спасибо.

Добавлено через 2 минуты
Цитата Сообщение от Alligieri Посмотреть сообщение
вы бы хоть код привели, я так понимаю используется не стандартный вариант ToString()?
Стандартный. Что-то вроде такого:
C#
1
2
3
BigInteger a;
string s = a.ToString();
File.WriteAllText(path, s);
Т.е. ничего особенного. Просто само по себе преобразование ToString() занимает кучу времени, вот я и думаю как это обойти. По сути нужно записать число (BigInteger) в текстовый файл.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
17.03.2013, 17:04
А, BigInteger.

Здесь возникает вполне резонный вопрос: с какой целью это значение пишется в файл?
0
3 / 3 / 1
Регистрация: 27.06.2011
Сообщений: 101
17.03.2013, 21:05  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
с какой целью это значение пишется в файл?
В файл записываю для себя. А в string преобразовываю, чтобы подсчитать длину числа.

Добавлено через 44 минуты
А что если как-то так:
1. Вычисляем BigInteger
2. Преобразуем в массив байтов и записываем в файл
3. Читаем первые 10 строк (к примеру) из файла и преобразуем их из байтов обратно в BigInteger, а потом в String (или сразу в string).
4. Строковую переменную записываем в другой файл.
5. Читаем следующие 10 строк и т.д.

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

Но встает вопрос: как корректно преобразовать полученный массив байтов в string или BigInteger?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
17.03.2013, 23:19
Чтобы подсчитать длину числа, берите десятичный логарифм + 1.
Будет быстрее, чем строить строку длиной в 100500 символов.
1
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
18.03.2013, 08:50
В случае с BigInteger перевод в строку действительно занимает много времени, так как число хранится в шестнадцатеричном формате и его перевод в десятичную сс зело нетороплив. Можно перевести вручную, но это не даст большого профита.
Но вот если вам только длина числа нужна, то можно использовать Log10, как уже написали выше.
1
Заблокирован
18.03.2013, 13:51
Есть еще способ, если компьютер многоядерный.
Переопределить .ToString() не удастся из за запрета наследования, зато можно написать метод расширения, для класса BigInteger.
В методе расширения, респараллелить задачу преобразования на подзадачи и каждую подзадачу запустить в новом потоке. Это приведет к распределению нагрузки между ядрами продессора. Для распараллеливания можно использовать System.Threading.Barrier
1
3 / 3 / 1
Регистрация: 27.06.2011
Сообщений: 101
18.03.2013, 19:57  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
Чтобы подсчитать длину числа, берите десятичный логарифм + 1.
Спасибо, попробую. Но длина - не основная задача. Число хотелось бы записать в файл...
Кстати, не подскажете как в BigInteger подсчитать lg?
Спасибо!
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
19.03.2013, 00:23
west0293, ну например посмотреть методы для BigInteger самому, прежде чем спрашивать здесь....
0
3 / 3 / 1
Регистрация: 27.06.2011
Сообщений: 101
19.03.2013, 10:17  [ТС]
Да, сори, с логарифмом давно разобрался) Но:
Число хотелось бы записать в файл...
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
19.03.2013, 11:54
Цитата Сообщение от west0293 Посмотреть сообщение
Число хотелось бы записать в файл...
Записывайте в шестнадцатеричной системе — будет очень быстро.
1
3 / 3 / 1
Регистрация: 27.06.2011
Сообщений: 101
19.03.2013, 14:06  [ТС]
Записывайте в шестнадцатеричной системе — будет очень быстро.
Не подскажете как?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
19.03.2013, 16:11
C#
1
2
3
BigInteger a;
string s = a.ToString("X");
File.WriteAllText(path, s);
1
3 / 3 / 1
Регистрация: 27.06.2011
Сообщений: 101
27.04.2013, 18:17  [ТС]
Вопрос актуален.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
27.04.2013, 18:46
Цитата Сообщение от west0293 Посмотреть сообщение
Вопрос актуален.
На данный момент самый быстрый способ — получит массив байт и написать свой метод, преобразующий эти байты в строку в десятичном формате.
Быстро это, к сожалению, не сделать.
0
3 / 3 / 1
Регистрация: 27.06.2011
Сообщений: 101
27.04.2013, 18:48  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
На данный момент самый быстрый способ — получит массив байт и написать свой метод, преобразующий эти байты в строку в десятичном формате.
Быстро это, к сожалению, не сделать.
А как, собственно, эти байты в строку преобразовать? Я пытался - получается ерунда какая-то...
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
27.04.2013, 18:53
Для начала это число надо преобразовать в десятичную систему счисления.
Преобразовывается так: берется остаток от деления на 16, пишется в результат. Число делится на 16. Продолжать, пока число больше нуля.
Именно поэтому быстро это не сделать.
Если вы, конечно, какой-то свой супер алогритм для этого не напишете.
1
3 / 3 / 1
Регистрация: 27.06.2011
Сообщений: 101
27.04.2013, 18:58  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
Для начала это число надо преобразовать в десятичную систему счисления.
Преобразовывается так: берется остаток от деления на 16, пишется в результат. Число делится на 16. Продолжать, пока число больше нуля.
Именно поэтому быстро это не сделать.
Если вы, конечно, какой-то свой супер алогритм для этого не напишете.
Что-то не понятно(( Не могли бы это в коде набросать, пожалуйста?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.04.2013, 18:58
Помогаю со студенческими работами здесь

Как реализовать метод ToString?
Здравствуйте, коллеги. Выручайте, кто может. Я написал программу по слудеющему заданию. Создать класс задающий данные для визитной...

Как переопределить метод toString
public Flat getBestSpace() { double bestSpace = 0; Flat flatBestSpace = null; for (int i = 0; i <...

Как вызывается метод toString
Здравствуйте. Подскажите пожалуйста откуда вызывается метод toString который формирует результирующую строку вывода. Во время создания...

Как реализовать в коде Equal и Tostring
]class Matrix { @Override public boolean equals(Object obj) { return false; } ...

Как сделать перегрузку метода ToString()
Помогите сделать перегрузку метода ToString(), еще чтобы были готовые 3 пациента при запуске, и после занесения данных они не записываются...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru