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

Память переполняется

12.07.2012, 11:56. Показов 906. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот код. Не могу понять. Все равно память переполняется и прога не работает.
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
protected void button2_Click(object sender, EventArgs e)
        {
            //Version vt;
            DirectoryInfo di = new DirectoryInfo(folderBrowserDialog1.SelectedPath);
            //string di = (textBox1.ToString());
            //int pathes = Directory.GetFiles(di).Length;
            
                //try
                //{
                //    if(!di.Exists)
                //    {
                //        di.Create();
                //    }
                //}
                //catch (Exception ex)
                //{
                //    MessageBox.Show("Ошибка: {0}", ex.ToString(), MessageBoxButtons.OK);
                //}
                //for (int l = 0; l < pathes; l++)
                //{
            if (di.GetFiles().Length > 0)
            {
                string[] fileEntries = Directory.GetFiles(di.ToString()); // получаешь список файлов в каталоге di.ToString()
                
                var dir = Directory.CreateDirectory(di + "\\01");
                foreach (string fileNames in fileEntries)
                {
                    image = new Bitmap(fileNames);
                    FileInfo fl = new FileInfo(string.Format("v_{0}.txt", forFilename)); 
                    //fl.CreateText();
                    forFilename++;
                    string path = string.Format("{0}\\{1}\\{2}", di, dir, fl);
                    
                    int[] dotHeight = new int[10];
                    int j = 0;
                    int[] dotWidth = new int[10];
                    int i = 0;
                    //Находить Rectangle в левой стороне бланка
                    for (y = 0; y < (image.Height); y++)
                    {
                        for (x = 0; x < image.Width/10; x++)
                        {
                            Color color = image.GetPixel(x, y);
                            if (color.R < 130 && color.G < 130 && color.B < 130)
                            {
                                if (j < 10)
                                {
                                    if (RectangleLeft.midle2 == 0)
                                    {
                                        RectangleLeft.FourDotLeft(image, x, y);
                                        if (RectangleLeft.midle2 != 0)
                                        {
                                            dotHeight[j] = RectangleLeft.midle2;
                                            j++;
                                        }
                                    }
                                    else
                                    {
                                        x = RectangleLeft.dotx;
                                        while (color.R < 130 && color.G < 130 && color.B < 130)
                                        {
                                            y = RectangleLeft.midle2++;
                                            color = image.GetPixel(x, y);
                                        }
                                        while (color.R > 130 && color.G > 130 && color.B > 130)
                                        {
                                            y = RectangleLeft.midle2++;
                                            color = image.GetPixel(x, y);
                                        }
                                        RectangleLeft.FourDotLeft(image, x, y);
                                        if (RectangleLeft.midle2 != 0)
                                        {
                                            dotHeight[j] = RectangleLeft.midle2;
                                            j++;
                                        }
                                    }
                                }
                            }
 
                        }
                    }
                    //Находить Rectangle в верхней стороне бланка
                    for (y = 0; y < image.Height/10; y++)
                    {
                        for (x = 0; x < image.Width; x++)
                        {
                            Color color = image.GetPixel(x, y);
                            if (color.R < 130 && color.G < 130 && color.B < 130)
                            {
                                if (i < 10)
                                {
                                    if (RectangleTop.midle1 == 0)
                                    {
                                        RectangleTop.FourDotTop(image, x, y);
                                        if (RectangleTop.midle1 != 0)
                                        {
                                            dotWidth[i] = RectangleTop.midle1;
                                            i++;
                                        }
                                    }
                                    else
                                    {
                                        y = RectangleTop.doty;
                                        while (color.R < 130 && color.G < 130 && color.B < 130)
                                        {
                                            x = RectangleTop.midle1++;
                                            color = image.GetPixel(x, y);
                                        }
                                        while (color.R > 130 && color.G > 130 && color.B > 130)
                                        {
                                            x = RectangleTop.midle1++;
                                            color = image.GetPixel(x, y);
                                        }
                                        RectangleTop.FourDotTop(image, x, y);
                                        if (RectangleTop.midle1 != 0)
                                        {
                                            dotWidth[i] = RectangleTop.midle1;
                                            i++;
                                        }
                                    }
                                }
 
                            }
                        }
                    }
                    //пишет в текстовый файл 0 и 1 
                    for (j = 0; j < 10; j++)
                    {
                        for (i = 0; i < 10; i++)
                        {
                            x = dotWidth[i];
                            y = dotHeight[j];
                            if (x != 0 && x != 0)
                            {
                                int k = 0;
                                int sum = 0;
                                //int[] getcolor_r = new int[112];
                                //int[] getcolor_g = new int[112];
                                //int[] getcolor_b = new int[112];
                                for (int z = 0; z < 28; z++)
                                {
                                    y -= z;
                                    Color pixel = image.GetPixel(x, y);
                                    getcolor_r[k] = pixel.R;
                                    getcolor_g[k] = pixel.G;
                                    getcolor_b[k] = pixel.B;
                                    k++;
                                    x += z;
                                    pixel = image.GetPixel(x, y);
                                    getcolor_r[k] = pixel.R;
                                    getcolor_g[k] = pixel.G;
                                    getcolor_b[k] = pixel.B;
                                    k++;
                                    z++;
                                    y += z;
                                    pixel = image.GetPixel(x, y);
                                    getcolor_r[k] = pixel.R;
                                    getcolor_g[k] = pixel.G;
                                    getcolor_b[k] = pixel.B;
                                    x -= z;
                                    pixel = image.GetPixel(x, y);
                                    getcolor_r[k] = pixel.R;
                                    getcolor_g[k] = pixel.G;
                                    getcolor_b[k] = pixel.B;
                                    for (int n = 0; n < 112; n++)
                                    {
                                        sum += getcolor_r[n] + getcolor_g[n] + getcolor_b[n];
 
                                    }
                                    sum = sum/112;
                                }
                                if (sum < 130)
                                {
                                    using (StreamWriter wr = File.AppendText(path))
                                    {
                                        wr.Write("1");
                                        wr.Close();
                                    }
                                }
                                else
                                {
                                    using (StreamWriter wr = File.AppendText(path))
                                    {
                                        wr.Write("0");
                                        wr.Close();
 
                                    }
                                }
                                
 
                            }
                        }
 
                        RectangleTop.midle1 = 0;
                        RectangleLeft.midle2 = 0;
 
 
                    }
                    image.Dispose();
                    //for (int f = 0; f < 112; f++)
                    //{
                    //    getcolor_b[f] = 0;
                    //    getcolor_g[f] = 0;
                    //    getcolor_r[f] = 0;
                    //}
                    //for (int s = 0; s < 10; s++)
                    //{
                    //    dotHeight[s] = 0;
                    //    dotWidth[s] = 0;
                    //}
 
 
                    //vt = new Version();
                }
            }
            else
            {
                MessageBox.Show("Папка пуста!");
            }
            //GC.Collect();
        }
Подскажите опытные пожалуйста
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.07.2012, 11:56
Ответы с готовыми решениями:

При сравнении двух коллекций - не видятся одинаковые файлы и очередь переполняется дублями имеющихся
Здравствуйте! Есть проблема. Может кто подскажет более правильное решение. Есть папка куда...

Почему не загружается картинка, но при этом переполняется память?
Всем доброго времени суток!Я хотел бы узнать почему не загружается картинка и при этом...

Стек переполняется и переполняется...
Короче говоря, в ходе написания программы наткнулся на то, что все время вылетает ошибка о том, что...

QStringList переполняется
QString FilePath = QFileDialog::getOpenFileName(this, tr(&quot;Загрузить файл&quot;),&quot;F://&quot;,&quot;Text File...

1
189 / 189 / 38
Регистрация: 11.04.2009
Сообщений: 497
12.07.2012, 16:55 2
Ваш код - это один большой метод. Что-то одно и большое - это всегда неудобно. Я не изучал вашего кода, но уверено, что его можно изменить, вынося логически-отдельные фрагменты в другие методы. Так код будет проще понимать и проще отлаживать.

Плохо:
C#
1
2
3
4
5
6
7
8
9
void DoSomeTask()
{
...
...
...
// over 90000 строк
..
..
}
Лучше:
C#
1
2
3
4
5
6
7
8
9
10
11
void DoSomeTask()
{
..
DoSomeSubTask();
...
for (int i = 0...) { 
...
ProcessSomeObject(i, ...)
..
}
}
0
12.07.2012, 16:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.07.2012, 16:55
Помогаю со студенческими работами здесь

Переполняется стек
Вот код: #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;algorithm&gt; using namespace std; ...

Почему массив не переполняется?
Вот в одной книге есть задание создать вектор и скопировать элементы в массив. Почему массив не...

переполняется Mail.box
Здравствуйте, проблема в следующем: какой то спамер использует мой сервер для рассылки ;) Когда он...

Переполняется папка TEMP
папка TEMP, как я примерно определил, при запуске IE или Opera начинает очень быстро забиваться...


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

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