27 / 29 / 5
Регистрация: 20.02.2012
Сообщений: 350
1

Преобразование строки в байты: оптимизировать алгоритм

09.11.2012, 20:38. Показов 1547. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Часть программы .... которая строку(довольно большую) содержащую 0 и 1 преобразует в байты( читает по 8 символов получаем байт удаляем прочитанные символы) . Данный кусок кода работает ну очень долго для больших строк .. как его можно оптимизировать?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
while (buffer.Length > 8)
                        {
                            byte l = 0;
                            for (int o = 0; o < 8; o++)
                                if (buffer[o] == '1')
                                    l = (byte)(l + (1 << (7 - o)));
                            mass[p] = l;
                            p++;
                            buffer = Remove(buffer);
                        }
//Метод remove
 
static private string Remove(string Del)
        {
            string b = "";
            for (int i = 8; i < Del.Length; i++)
            {
                b += Del[i];
            }
            return b;
        }
Добавлено через 6 минут
И еще вопрос ... программа при работе загружает только 13% процессора , почему так мало ? Как заставить ее использовать всю мощь Core i7 ? =)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.11.2012, 20:38
Ответы с готовыми решениями:

оптимизировать алгоритм поиска вхождений строки в текстовый файл (1 Мб)
Здравствуйте. По заданию требовалось составить программу для подсчета вхождений разных сочетаний...

Нормальный алгоритм Маркова: преобразование строки
A = {a,b,c} Дописать в конец слова столько букв с, сколько в этом слове букв b. b -&gt; *B *a -&gt; a*...

Преобразование объекта в байты
в ActionScript есть тип ByteArray, то есть массив байтов и в него можно добавлять объекты var...

Преобразование base64 в байты
Добрый день, товарищи-форумчане! Помогите с VB net. Имеется следующая задача: Считать файл,...

10
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
09.11.2012, 20:53 2
можно попробовать выставить Priority
0
27 / 29 / 5
Регистрация: 20.02.2012
Сообщений: 350
09.11.2012, 20:56  [ТС] 3
Прямо в самой системе ? Через диспетчер задач?
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
09.11.2012, 21:06 4
C#
1
Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.High;
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
09.11.2012, 21:15 5
Sparrow44, ммм...не удалять из строки прочитанное. Не делать смещений, и прочих арифметических операций лишних. Сделать через |, или Convert.ToByte попробовать по 8 символов отдавая ей и выставив базу в 2. Может, будет быстрее, а, может, нет. Тести.
0
Эксперт Java
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
09.11.2012, 22:25 6
У вас ужасная реализация метода Remove.
Зачем вы его вообще писали, когда есть Substring ?
Зачем вы вообще удаляете из строки символы, разве нельзя завести счетчик - текущий номер символа.
0
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
09.11.2012, 23:01 7
C#
1
2
3
4
5
6
7
8
9
10
11
12
        private byte[] ToBytes(string bits)
        {
            int rem;
            int bytesCount = Math.DivRem(bits.Length, 8, out rem);
 
            var result = new byte[bytesCount + (rem > 0 ? 1 : 0)];
 
            for (int i = 0; i < bits.Length; i++)
                result[i/8] |= (byte) ((bits[i] & 1) << (i%8));
 
            return result;
        }
1
27 / 29 / 5
Регистрация: 20.02.2012
Сообщений: 350
10.11.2012, 12:41  [ТС] 8
Цитата Сообщение от turbanoff Посмотреть сообщение
У вас ужасная реализация метода Remove.
Зачем вы его вообще писали, когда есть Substring ?
Зачем вы вообще удаляете из строки символы, разве нельзя завести счетчик - текущий номер символа.
Потому ,что если не удалять символы из строки то довольно быстро она переполняется ....
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
10.11.2012, 13:06 9
Sparrow44, строка не может переполнится потому что строки неизменяемого размера...
0
2 / 2 / 0
Регистрация: 13.06.2012
Сообщений: 20
13.11.2012, 15:44 10
Сделайте вторую строку.
0
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
13.11.2012, 22:02 11
Конкатенация строки в цикле - это очень неэффективно. Для таких целей есть StringBuilder.
0
13.11.2012, 22:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.11.2012, 22:02
Помогаю со студенческими работами здесь

Преобразование текста в байты и обратно
Необходимо считать строку текста, получить последовательность байт, провести некоторые...

Преобразование пути к файлу в байты. Пишет исключение о дате/времени
Привет всем! Поехали: нужно путь (н.п.&quot;C:\\Users\\d.txt&quot;) преобразовать в байты. в процессе...

Оптимизировать алгоритм
Не углубляясь в детали , суть задачи - добавлять в конец вектора два элемента с значением первого и...

Оптимизировать алгоритм
Приятель подкинул задачку: Получить новую матрицу В, элемент b которой равен наименьшему из...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru