Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 18.07.2011
Сообщений: 14
1

Медленно работает код

18.07.2011, 09:25. Показов 1866. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Я только начал работать на C# и сразу столкнулся с проблемой. Программа выполняется очень медленно (зависает на минуту или больше), хотя подобные решения не раз использовал на С++(код работал без промедления). Подскажите, пожалуйста, в чем может быть дело.
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
//в textbox1 множество строк(тысячи) информации вроде "3009;  0.954921;0;0; 0;0;0;0;0;0;0;0;    0;0;0;1;0;0;0;0;     0.00;    0.02;   -0.02;   0.000;    0.26;   -0.26;    0.00;   0.000;     0.3;    -0.2;"
//все эти числа хочу поместить в двумерный массив Array для дальнейшей работы с ними.
 
int sh = 1;
            for (int i = 1; i < textBox1.Lines[0].Length; i++)
            {
                if (textBox1.Lines[0][i] == ';') sh++;
            }
            double[,] Array;
            StringBuilder str=new StringBuilder();
            StringBuilder obr = new StringBuilder("           ",11);
            Array = new double[textBox1.Lines.Count(), sh + 1];
            for (int i = 1; i <= textBox1.Lines.Count() - 6; i++)
            {
                int u = 0;
                int sh1 = 0;
                for (int j = 1; j <= sh; j++)
                {
                    str.Clear();
                    str.Append(textBox1.Lines[i + 4]);
                    label1.Text = Convert.ToString(i);
                    int l = 0;
                    do
                    {
                        u++;
                        if (str[u] != ' ')
                        {
                            obr[l] = str[u];
                            if (str[u] == '.') obr[l] = ',';
                            l++;
                        }
                        if (str[u + 1] == ';')
                        {
                            sh1++;
                            u++;
                        }
 
                    } while (sh1 != j);
                    Array[i, j] = Convert.ToDouble(Convert.ToString(obr));
                    for (int z = 0; z < obr.Length; z++) obr[z] = ' ';
                }
            }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.07.2011, 09:25
Ответы с готовыми решениями:

Несколько GetPixel с экрана - код работает слишком медленно
Собственно в данный момент я использую этот код. int GetPixel(int X, int Y) { Bitmap bmp...

Очень медленно работает код!
В этом коде производится приращение значений r,g,b - по выбору(из ComboBox) public partial class...

Медленно работает код в связке с AutoIt
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks;...

Интроспективная сортировка работает слишком медленно
Интроспективная сортировка (IntroSort) работает слишком медленно. Как улучшить алгоритм?

3
гроза ленивых студентов
456 / 411 / 51
Регистрация: 27.03.2011
Сообщений: 823
18.07.2011, 20:26 2
при условии, что я правильно понял то, что ты хочешь увидеть, попробуй вот так, как результаты?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//не забыть подключить System.Globalization
            var numberFormat = (NumberFormatInfo) CultureInfo.CurrentCulture.NumberFormat.Clone();
                        numberFormat.NumberDecimalSeparator = ".";
            textBox1.Text = textBox1.Text.Replace(" ","");
            var inLine = 0;
            foreach (var ch in textBox1.Lines[0])
                if (ch==';') inLine++;
            var array = new double [textBox1.Lines.Length, inLine];
            var temp_str = "";
            var str = new string[inLine];
            for (var i=0; i<textBox1.Lines.Length; i++)
            {
                temp_str = textBox1.Lines[i].Remove(textBox1.Lines[i].Length-2,1);
                str = textBox1.Lines[i].Split(';');
                for(var j=0; j<str.Length-1; j++)
                    array[i,j] = double.Parse(str[j],numberFormat);
            }
Добавлено через 11 минут
то же самое, только убрано лишнее ненужное действие на каждом шаге:
код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
            var numberFormat = (NumberFormatInfo) CultureInfo.CurrentCulture.NumberFormat.Clone();
            numberFormat.NumberDecimalSeparator = ".";
            textBox1.Text = textBox1.Text.Replace(" ","");
            var inLine = 0;
            foreach (var ch in textBox1.Lines[0])
                if (ch==';') inLine++;
            var array = new double [textBox1.Lines.Length, inLine];
            var str = new string[inLine];
            for (var i=0; i<textBox1.Lines.Length; i++)
            {
                str = textBox1.Lines[i].Split(';');
                for(var j=0; j<str.Length-1; j++)
                    array[i,j] = double.Parse(str[j],numberFormat);
            }
1
1 / 1 / 0
Регистрация: 18.07.2011
Сообщений: 14
20.07.2011, 12:17  [ТС] 3
Спасибо за ответ. Во время компиляции, как я понял во время заполнения массива данными, выдает ошибку "FormatException was unhandled"
на участке
C#
1
2
  for (var j = 0; j < str.Length - 1; j++)
                    array[i, j] = double.Parse(str[j], numberFormat);
попробую разобраться)

Добавлено через 3 часа 44 минуты
Ему что-то не нравится в формате строки str[j] ... со строкой str= "123" работает прекрасно, хотя split должен вернуть массив тех же строк. Буду признателен любым предложениям)

Добавлено через 40 минут
Не заметил простой ошибки, преобразование необходимо было проводить с 5 строки текстбокса.
Код летает) вот конечный вариант:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
            textBox1.Text = textBox1.Text.Replace(" ", "");
            textBox1.Text = textBox1.Text.Replace(".", ",");
            var inLine = 0;
            foreach (var ch in textBox1.Lines[0])
                if (ch == ';') inLine++;
            var array = new double[textBox1.Lines.Length, inLine];
            var str = new string[inLine];           
            for (var i = 0; i < textBox1.Lines.Length-5; i++)
            {
                str = textBox1.Lines[i+5].Split(';');                
                for (var j = 0; j < str.Length-2; j++)                    
                array[i, j] = double.Parse(str[j]);                
            }
0
sh
3 / 3 / 0
Регистрация: 25.07.2011
Сообщений: 8
25.07.2011, 09:17 4
Еще быстрее и правильнее сделать так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// берем все из textBox1
textBox1.SelectAll();
string fullText = textBox1.SelectedText;
 
// замены
fullText = fullText.Replace(" ", "");
fullText = fullText.Replace(".", ",");
 
string [] sstr = {"\r\n"};
 
// разбиваем на строки
string [] lines = fullText.Split(sstr, System.StringSplitOptions.RemoveEmptyEntries);
 
// а вот с этим даже первый вариант летать будет
.
.
.
//

Часто встречаюсь с такой ситуацией: человек пишет веб интерфейс к БД.
Ему нужно сделать выборку, что реализуется на уровне самой базы. Но он деает это в веб коде -
перебирает значения. Естественно соединение с базой в это время постоянно активно.
Это нормально для корп. ресурса малого предприятия 10 - 50 человек. А если интернет магазин???

Смысл в том, что источник данных ВСЕГДА (ну почти) лучше освободить как можно раньше.

PS: to znake использовать var там, где хватит простых типов не есть гуд для программиста.
1
25.07.2011, 09:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.07.2011, 09:17
Помогаю со студенческими работами здесь

Написал генератор тайлов. Работает медленно
Здравствуйте. Я тут сделал генератор тайлов для так называемого польского формата карт (.mp)....

При сканировании хостов нужно собрать информацию о них. Все работает, но слишком медленно
Разработал систему мониторинга. При сканировании хостов нужно собрать информацию о них. Все...

Код выполняемый из студии с пометкой debag, работает не так как уже компилированный код
Здравствуйте, столкнулся с такой проблемой. Код выполняемый из студии с пометкой debag, работает не...

Медленно работает код
Здравствуйте. Не понимаю почему этот код For i = 3 To 1000 x =...


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

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