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

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

13.11.2010, 23:02. Показов 962. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru