Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
10 / 12 / 2
Регистрация: 13.01.2010
Сообщений: 363

Нужно оптимизировать код

13.11.2010, 23:02. Показов 979. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я новичок, и о том, как сделать код быстрее и правильнее не очень хорошо понимаю.

Программа берёт файл, в котором в таком виде написаны IP адресы:
Code
1
0.0.0.0 - 0.0.1.0 1.1.1.1 - 1.1.2.1
и так далее. Потом преобразовывает в .bat файл:
Code
1
2
VNC.exe -i 0.0.0.0-0.0.0.0 -p 3389 -cT -T 5000
VNC.exe -i 0.0.1.0-1.1.1.1 -p 3389 -cT -T 5000
Вот мой код, и при обработке файла весом 200кб вылетает, говорит OutOfMemoryError в mscorlib.dll

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
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        public string readtxt(string path)
        {
            string txt = "";
            using (System.IO.StreamReader sr = System.IO.File.OpenText(path))
            {
                string s = "";
                while ((s = sr.ReadLine()) != null)
                {
                    txt += s;
                }
            }
            return txt;
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Прога работает с ipranges с сайта:\nhttp://www.ipaddresslocation.org/ip_ranges/get_ranges.php\n\nПрограмма создаёт батник для VNC сканера на RPD.\n\nВнимание: необходимо удалить лишние пробелы в начале и конце файла ipranges.", "razor96");
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            string txt = readtxt(textBox1.Text);
            int spaces = 0;
            int found = 0;
            int lastf = 0;
            string[] ip = new string[100000];
            for (int i = 0; i < txt.Length; i++)
            {
                if (txt[i] == ' ')
                {
                    spaces++;
                }
                if (spaces == 3)
                {
                    ip[found] = txt.Substring(lastf+1,i-(lastf-1)).Replace(" ","");
                    found++;
                    lastf = txt[i];
                    spaces = 0;
                }
            }
            writetxt("vncscan.bat","@echo off");
            for (int i = 0; i < ip.Length; i++)
            {
                addtxt("vncscan.bat", "\nVNC.exe -i "+ip[i]+" -p 3389 -cT -T 5000");
            }
            addtxt("vnscan.bat", "\npause > NUL");
            MessageBox.Show("Батник создан. Всего диапазонов: "+found, "OK!");
        }
 
        public void writetxt(string path, string text)
        {
            using (System.IO.FileStream fs = System.IO.File.Create(path, 1024))
            {
                byte[] info = new System.Text.UTF8Encoding(true).GetBytes(text);
                fs.Write(info, 0, info.Length);
            }
        }
 
        public void addtxt(string path, string text)
        {
            text = readtxt(path) + text;
            using (System.IO.FileStream fs = System.IO.File.Create(path, 1024))
            {
                byte[] info = new System.Text.UTF8Encoding(true).GetBytes(text);
                fs.Write(info, 0, info.Length);
            }
        }
    }
P.s. сильно не ругайте, я только учусь =)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.11.2010, 23:02
Ответы с готовыми решениями:

Нужно оптимизировать код вывода строки-описания для числа
namespace If { class Program { static void Main(string args) { If30(); } ...

Нужно ли оптимизировать перегрузку?
Всем привет. Есть у меня функция: public void SetUInt32(ushort Field, uint Value){ /*бла бла бла */} и использовал я её раньше вот...

Оптимизировать код
Всем привет! Как вы считаете, как можно было бы оптимизировать этот кусок private int...

5
194 / 193 / 17
Регистрация: 07.11.2010
Сообщений: 477
13.11.2010, 23:19
Сложно все сразу сказать - сам недавно начал писать на C#.
Но кое-что в глаза бросилось.

Файл можно считать не по строкам, а сразу весь. Вроде так:
C#
1
2
3
4
5
6
7
       public string readtxt(string path)
        {
            string txt = "";
            using (System.IO.StreamReader sr = System.IO.File.OpenText(path))
            {  txt=sr.ReadToEnd() }
            return txt;
        }
И еще. Ошибка возможно возникает изза того, что здесь:
C#
1
2
3
4
            for (int i = 0; i < ip.Length; i++)
            {
                addtxt("vncscan.bat", "\nVNC.exe -i "+ip[i]+" -p 3389 -cT -T 5000");
            }
в цикле вызывается addtxt. А в addtxt снова считывается файл:
C#
1
           text = readtxt(path) + text;
Глубже копаться тяжело - голова уже не варит )
1
10 / 12 / 2
Регистрация: 13.01.2010
Сообщений: 363
14.11.2010, 00:04  [ТС]
Подкорректировал, теперь код выглядит так, но ошибка пока не уходит:
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
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            string txt = readtxt(textBox1.Text);
            int spaces = 0;
            int found = 0;
            int lastf = 0;
            string totxt = "";
            string[] ip = new string[100000];
            for (int i = 0; i < txt.Length; i++)
            {
                if (txt[i] == ' ')
                {
                    spaces++;
                }
                if (spaces == 3)
                {
                    ip[found] = txt.Substring(lastf+1,i-(lastf-1)).Replace(" ","");
                    found++;
                    lastf = txt[i];
                    spaces = 0;
                }
            }
            
            for (int i = 0; i < ip.Length; i++)
            {
                totxt+="\nVNC.exe -i "+ip[i]+" -p 3389 -cT -T 5000";
            }
            totxt+="\npause > NUL";
            writetxt("vncscan.bat", totxt);
            MessageBox.Show("Батник создан. Всего диапазонов: "+found, "OK!");
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Прога работает с ipranges с сайта:\nhttp://www.ipaddresslocation.org/ip_ranges/get_ranges.php\n\nПрограмма создаёт батник для VNC скана на RPD.\n\nВнимание: необходимо удалить лишние пробелы в начале и конце файла ipranges.", "razor96");
        }
 
        public string readtxt(string path)
        {
            string txt = "";
            using (System.IO.StreamReader sr = System.IO.File.OpenText(path))
            { txt = sr.ReadToEnd(); }
            return txt;
        }
 
        public void writetxt(string path, string text)
        {
            using (System.IO.FileStream fs = System.IO.File.Create(path, 1024))
            {
                byte[] info = new System.Text.UTF8Encoding(true).GetBytes(text);
                fs.Write(info, 0, info.Length);
            }
        }
    }
0
194 / 193 / 17
Регистрация: 07.11.2010
Сообщений: 477
14.11.2010, 10:20
Еще что-то с lastf в цикле накручено. То это счетчик положения
C#
1
ip[found] = txt.Substring(lastf+1,i-(lastf-1)).Replace(" ","");
то потом ему присваивается символ
C#
1
lastf = txt[i];
Проще архив с проектом и исходным файлом для обработки выложить )
0
 Аватар для Konctantin
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
14.11.2010, 12:09
допустим файл имеет такую структуру:
неважно сколько строк и сколько групп в длину, главное чтоб соблюдалась парность
Code
1
2
3
4
5
6
0.0.0.0 - 0.0.1.0 1.1.1.1 - 1.1.2.1 0.0.0.0 - 0.0.1.0 1.1.1.1 - 1.1.2.1
0.0.0.0 - 0.0.1.0 1.1.1.1 - 1.1.2.1 0.0.0.0 - 0.0.1.0 1.1.1.1 - 1.1.2.1
0.0.0.0 - 0.0.1.0 1.1.1.1 - 1.1.2.1 0.0.0.0 - 0.0.1.0 1.1.1.1 - 1.1.2.1
0.0.0.0 - 0.0.1.0 1.1.1.1 - 1.1.2.1 0.0.0.0 - 0.0.1.0 1.1.1.1 - 1.1.2.1
0.0.0.0 - 0.0.1.0 1.1.1.1 - 1.1.2.1 0.0.0.0 - 0.0.1.0 1.1.1.1 - 1.1.2.1
0.0.0.0 - 0.0.1.0 1.1.1.1 - 1.1.2.1 0.0.0.0 - 0.0.1.0 1.1.1.1 - 1.1.2.1
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
void CreateBat(string path)
{
    int count = 0;
    using (TextReader sr = new StreamReader(path))
    {
        using (TextWriter tw = new StreamWriter("scan.bat"))
        {
            string str = string.Empty;
            while ((str = sr.ReadLine()) != null)
            {
                string[] line = str.Split(new[]{' '}, StringSplitOptions.RemoveEmptyEntries);
                for (int i = 0; i < line.Length; i += 3)
                {
                    if (line.Length > (i + 2))
                    {
                        tw.WriteLine("VNC.exe -i {0}-{1} -p 3389 -cT -T 5000", line[i], line[i + 2]);
                        count++;
                    }
                }
            }
            tw.WriteLine("pause > NUL");
            tw.Flush();
        }
    }
    MessageBox.Show("Батник создан. Всего диапазонов: " + count, "OK!");
}
1
10 / 12 / 2
Регистрация: 13.01.2010
Сообщений: 363
15.11.2010, 00:21  [ТС]
строка там одна, но очень длинная...

Добавлено через 1 минуту
Konctantin, спасибо за код, завтра вечером проверю, отпишусь.

Добавлено через 1 минуту
Leax, да, с lastf что-то я напутал по невнимательности. Должно присваиваться i. Наверно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.11.2010, 00:21
Помогаю со студенческими работами здесь

Оптимизировать код
Добрый день, форумчане! roundButton1.Enabled = false; roundButton1.BackColor = Color.LightGray; roundButton1.BackColor2 =...

Оптимизировать код
Господа, я являюсь новичком. Написал небольшую прожку для тренировки, но уверен что опытный программист назовет реализацию говнокодом. ...

Оптимизировать код
Как оптимизировать код? Задача: Задано трехзначное число. Какая цифра в нем больше: первая или последняя? using System; ...

Оптимизировать код
Препод сказал оптимизировать код, а что изменить вообще не знаю public class Test { public double a; public...

Оптимизировать код
Написал программу, которая считывает данные из файла(вещественные числа), записывает данные в массив, находит минимальное, среднее и...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru