Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
19 / 18 / 14
Регистрация: 06.03.2013
Сообщений: 335
1

Быстрое формирование списков большого количество данных

30.08.2016, 12:05. Показов 1678. Ответов 16
Метки нет (Все метки)

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
    public class FileList
    {
        public int ID { get; set; }
        public string Url { get; set; }
        public ObservableCollection<BL> bl { get; set; }
    }
    public class BL
    {
        public int T { get; set; }
        public int I { get; set; }
        public string ID { get; set; }
        public int D { get; set; }
        public int S { get; set; }
        public ObservableCollection<GR> gr { get; set; }
        public long VKU { get; set; }
        public string UCH { get; set; }
    }
    public class GR
    {
        public int owner_T { get; set; }
        public string UCH { get; set; }
        public long VKU { get; set; }
        public int T { get; set; }
        public string C { get; set; }
        public string V { get; set; }
        public int N { get; set; }
    }
которые биндятся в datagrid (а также в datagrid которые в rowdetatil):
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
            <DataGrid x:Name="Xml_Files" AutoGenerateColumns="False" IsReadOnly="True" MouseLeftButtonUp="Xml_Files_MouseLeftButtonUp">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="ID" Binding="{Binding ID}"/>
                    <DataGridTextColumn Header="Url" Binding="{Binding Url}"/>
                </DataGrid.Columns>
                <DataGrid.RowDetailsTemplate>
                    <DataTemplate>
                        <DataGrid ItemsSource="{Binding Path=bl}" IsReadOnly="True">
                            <DataGrid.RowDetailsTemplate>
                                <DataTemplate>
                                    <DataGrid
                                        ItemsSource="{Binding Path=gr}" 
                                        IsReadOnly="True"/>
                                </DataTemplate>
                            </DataGrid.RowDetailsTemplate>
                        </DataGrid>
                    </DataTemplate>
                </DataGrid.RowDetailsTemplate>
            </DataGrid>
Вопрос в следующем: Нужно что-нибудь побыстрее, чем foreach который будет формировать отдельные списки для моделей BL и GR из общей коллекции Filelist(c BL и GR).

Добавлено через 5 минут
Отдельные списки мне нужны для того, чтобы делать sqlbulkcopy этих самых данных
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.08.2016, 12:05
Ответы с готовыми решениями:

Быстрое формирование Word документа. Методы
Доброе время суток, ув. жители форума! Кто сталкивался с задачей формирования документов в MS...

Быстрое чтение большого массива данных с Excel в C++Builder
Всем привет! нужна помощь. Считываю диапазон ячеек с Excel. Например размером 18 на 3500. Код ниже:...

Быстрое заполнение большого файла
Здравствуйте! Возникла проблема в работе с большим файлом: возникла необходимость быстро...

Максимальное быстрое создание большого файла
У кого какие алгоритмы создания максимально быстро файлов, больших размеров?

16
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
30.08.2016, 13:50 2
ILKarina, т.е. наоборот ведь, из моделей на сервер!

Добавлено через 5 минут
Цитата Сообщение от ILKarina Посмотреть сообщение
foreach который будет формировать отдельные списки для моделей BL и GR из общей коллекции Filelist(c BL и GR)
А Вы пробовали?
Заполняете DataTable, настраиваете мэппинги и сохраняете.

http://www.sqlteam.com/article... sql-server

Медленно выходит?
0
19 / 18 / 14
Регистрация: 06.03.2013
Сообщений: 335
30.08.2016, 14:34  [ТС] 3
golubyatnikovtv, т.е. вы говорите что я могу просто так взять List<FileList> и закинуть bulk'ом в две таблицы?

Добавлено через 2 минуты
У меня ведь каждый элемент filelist содержит observablecollection<br> а каждый элемент в observablecollection<br> содержится еще observablecollection<gr>

Добавлено через 1 минуту
И мне надо bulk'ом раскидать все observablecollection<br> в tableBR и все observablecollection<gr> в tableGR
0
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
30.08.2016, 14:41 4
ILKarina, ну не совсем уж так элементарно...

Формируете два DataTable'а из Ваших моделей, для первого создаете SqlBulkCopy, выполняете сохранение, затем то же самое для второго.

Добавлено через 3 минуты
Цитата Сообщение от ILKarina Посмотреть сообщение
И мне надо bulk'ом раскидать все observablecollection<br> в tableBR и все observablecollection<gr> в tableGR
Раскидайте их не bulk'ом а обычными foreach'ами в DataTable'ы. DataTable'ы уже подсовывайте в SqlBulkCopy.
0
19 / 18 / 14
Регистрация: 06.03.2013
Сообщений: 335
30.08.2016, 15:38  [ТС] 5
golubyatnikovtv, в том то и дело что foreach'ем долго раскидывается. ~50000 элементов обрабатывает полторы минуты.
0
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
30.08.2016, 15:40 6
Цитата Сообщение от ILKarina Посмотреть сообщение
~50000 элементов
Совсем не много.

Что именно Вы делаете, как обрабатываете, что "форматируете" (как Вы написали в первом посте)?
0
19 / 18 / 14
Регистрация: 06.03.2013
Сообщений: 335
30.08.2016, 16:06  [ТС] 7
golubyatnikovtv,
C#
1
2
3
4
5
6
7
8
9
10
List<Bmodel> Blist;//Bmodel уже без Gcollection
List<Gmodel> Glist;
foreach(var item in filelist){
foreach(var bitem in filelist.bcollection){
Blist.Add(/*тут столбцы из bitem*/);
foreach(var gitem in bitem.gcollection){
Glist.Add(/*тут столбцы из gitem*/);
}
}
}
0
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
30.08.2016, 16:12 8
ILKarina, кажется, что код, который Вы публиковали в первом посте уже не актуален.
Покажите код моделей и тот код, который полторы секунды выполняется.

Цитата Сообщение от ILKarina Посмотреть сообщение
/*тут столбцы из bitem*/
Не нужно комментировать, покажите как есть.

50000 элементов где?
1) filelist
2) filelist.bcollection
3) bitem.gcollection
Я сам не смогу отгадать.
0
19 / 18 / 14
Регистрация: 06.03.2013
Сообщений: 335
30.08.2016, 16:28  [ТС] 9
golubyatnikovtv, кода под рукой нету. Проект на работе.
Задача такова: есть xml-файл с тысячами тегов <b></b>. Внутри <b> есть около 20-40 тегов <g></g>. Внутри <b> и <g> распознать атрибуты и занести в базу. Т.о. просто распарсить xml-ку и занести данные в бд.
Распарсить я распарсил, с помощью модели в первом посте. Теперь надо список который получился в результате закинуть в бд.
xml-файлов может быть очень много.
0
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
30.08.2016, 16:36 10
Цитата Сообщение от ILKarina Посмотреть сообщение
Теперь надо список который получился в результате закинуть в бд.
Это разовая задача? Даже если много файлов.

Цитата Сообщение от ILKarina Посмотреть сообщение
кода под рукой нету. Проект на работе.
Ну когда будет доступ к коду покажите. Полторы секунды на 50000 элементов - это наверняка Вы что-то не так делаете. И вообще не понятно что там делается... List'ы что-ли из одного в другой перегоняются?

Повторюсь, Вам нужно из данных сформировать DataTable (а не простые списки), чтобы воспользоваться SqlBulkCopy.
Если задача разовая можно не заморачиваться с этим, возможно потеряете больше времени, чем просто вставить все данные через SqlCommand типа INSERT INTO ... VALUES ...
0
19 / 18 / 14
Регистрация: 06.03.2013
Сообщений: 335
31.08.2016, 07:06  [ТС] 11
golubyatnikovtv,
Кликните здесь для просмотра всего текста

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
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
        DataTable BLtable = new DataTable("BL");
        DataTable GRtable = new DataTable("GR");
        List<FileList> xmllst ;
        public MainWindow()
        {
            InitializeComponent();
            BLtable.Columns.Add("T", typeof(int));
            BLtable.Columns.Add("I", typeof(int)); 
            BLtable.Columns.Add("ID", typeof(string));
            BLtable.Columns.Add("D", typeof(int));
            BLtable.Columns.Add("S", typeof(int));
            BLtable.Columns.Add("VKU", typeof(long));
            BLtable.Columns.Add("UCH", typeof(string));
            
            GRtable.Columns.Add("owner_T", typeof(int));
            GRtable.Columns.Add("UCH", typeof(string));
            GRtable.Columns.Add("VKU", typeof(long));
            GRtable.Columns.Add("T", typeof(int));
            GRtable.Columns.Add("C", typeof(string));
            GRtable.Columns.Add("V", typeof(string));
            GRtable.Columns.Add("N", typeof(int));
            Upload.IsEnabled = false;
        }
        private void OpenFolder_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                xmllst = new List<FileList>();                
                if (Environment.OSVersion.Version.Major >= 6)
                {
                    var dialog = new CommonOpenFileDialog { IsFolderPicker = true };
                    CommonFileDialogResult result = dialog.ShowDialog();
                    if (result != CommonFileDialogResult.Cancel)
                    {
                        CommonLoadFiles(1, dialog);
                    }
                }
                else
                {
                    var dialog = new FolderBrowserDialog();
                    var result = dialog.ShowDialog();
                    if (result != System.Windows.Forms.DialogResult.Cancel)
                    {
                        OldLoadFiles(1, dialog);
                    }
                }
                
                Xml_Files.ItemsSource = xmllst;
                Upload.IsEnabled = true;
            }
            catch (Exception ex)
            {
                System.Windows.MessageBox.Show(ex.ToString());
            }
        }
        private void CommonLoadFiles(int i, CommonOpenFileDialog dialog)
        {
            var timer = Stopwatch.StartNew();
            foreach (var item in Directory.GetFiles(dialog.FileName, "*.xml", SearchOption.AllDirectories))
            {
                var parsed_bl = tagBL(item);
                xmllst.Add(new FileList() { ID = i, Url = item, bl = parsed_bl });
            }
            timer.Stop();
            System.Windows.MessageBox.Show("Files loaded in " + timer.ElapsedMilliseconds + "!");
        }
        private void OldLoadFiles(int i, FolderBrowserDialog dialog)
        {
            var timer = Stopwatch.StartNew();
            foreach (var item in Directory.GetFiles(dialog.SelectedPath,"*.xml",SearchOption.AllDirectories))
            {
                var parsed_bl = tagBL(item);
                xmllst.Add(new FileList() { ID = i, Url = item, bl = parsed_bl });
            }
            timer.Stop();
            System.Windows.MessageBox.Show("Files loaded in " + timer.ElapsedMilliseconds + "!");
        }
        private ObservableCollection<BL> tagBL(string file)
        {
            var tempxml = new XmlDocument();
            var xml = file;
            var xmlKptReader = new XmlTextReader(xml);
            var res = new ObservableCollection<BL>();
            tempxml.Load(xmlKptReader);
 
            var tag_pack = tempxml.SelectSingleNode("PACK");
            if (tag_pack != null)
            {
                var tag_BL = tag_pack.SelectSingleNode("BL");
                if (tag_BL != null)
                {
                    foreach(var item in tag_BL)
                    {
                        var tag_B = tag_BL.SelectNodes("B");
                        if (tag_B != null)
                        {
                            XmlAttributeCollection documentAttributes = ((XmlNode)item).Attributes;
                            if (documentAttributes != null)
                            {
                                BL blitem = new BL();
                                foreach (XmlAttribute documentAttribute in documentAttributes)
                                {
                                    switch (documentAttribute.Name)
                                    {
                                        case "I":
                                            blitem.I = XmlConvert.ToInt32(documentAttribute.Value);
                                            break;
                                        case "T":
                                            blitem.T = XmlConvert.ToInt32(documentAttribute.Value);
                                            break;
                                        case "ID":
                                            blitem.ID = documentAttribute.Value;
                                            break;
                                        case "D":
                                            blitem.D = XmlConvert.ToInt32(documentAttribute.Value);
                                            break;
                                        case "S":
                                            blitem.S = XmlConvert.ToInt32(documentAttribute.Value);
                                            break;
                                    }
                                }
                                blitem.UCH = getUch(((XmlNode)item), blitem.T);
                                blitem.VKU = getVKU(((XmlNode)item), blitem.T);
                                DataRow BLRow = BLtable.NewRow();
                                BLRow["T"] = blitem.T;
                                BLRow["I"] = blitem.I;
                                BLRow["ID"] = blitem.ID;
                                BLRow["D"] = blitem.D;
                                BLRow["S"] = blitem.S;
                                BLRow["VKU"] = blitem.VKU;
                                BLRow["UCH"] = blitem.UCH;
                                BLtable.Rows.Add(BLRow);
                                blitem.gr = tagGR(((XmlNode)item), blitem.T, blitem.UCH, blitem.VKU);                                
                                res.Add(blitem);
                            }
                        }
                    }                    
                }
            }            
            return res;
        }
        private ObservableCollection<GR> tagGR(XmlNode B, int owner_T,string UCH, long VKU)
        {
            var res = new ObservableCollection<GR>();
            var tag_GR = B.SelectSingleNode("GR");
            if (tag_GR != null)
            {
                foreach (var item in tag_GR)
                {
                    var tag_G = tag_GR.SelectNodes("G");
                    if (tag_G != null)
                    {
                        XmlAttributeCollection documentAttributes = ((XmlNode)item).Attributes;
                        if (documentAttributes != null)
                        {
                            GR gritem = new GR();
                            gritem.owner_T = owner_T;
                            foreach (XmlAttribute documentAttribute in documentAttributes)
                            {
                                switch (documentAttribute.Name)
                                {
                                    case "T":
                                        gritem.T = XmlConvert.ToInt32(documentAttribute.Value);
                                        break;
                                    case "C":
                                        gritem.C = documentAttribute.Value;
                                        break;
                                    case "V":
                                        gritem.V = documentAttribute.Value;
                                        break;
                                    case "N":
                                        gritem.N = XmlConvert.ToInt32(documentAttribute.Value);
                                        break;
                                }
                            }
                            gritem.UCH = UCH;
                            gritem.VKU = VKU;
                            DataRow GRRow = GRtable.NewRow();
                            GRRow["owner_T"] = gritem.owner_T;
                            GRRow["UCH"] = gritem.UCH;
                            GRRow["VKU"] = gritem.VKU;
                            GRRow["T"] = gritem.T;
                            GRRow["C"] = gritem.C;
                            GRRow["V"] = gritem.V;
                            GRRow["N"] = gritem.N;
                            GRtable.Rows.Add(GRRow);
                            res.Add(gritem);
                        }
                    }
                }
                
            }
            return res;
        }
        long evenVKU = 0;
        string evenUCH = "";
        private long getVKU(XmlNode B, int T)
        {
            long res = 0;
            var tag_GR = B.SelectSingleNode("GR");
            if (tag_GR != null)
            {
                int i = 1;
                int vkunum = 0;
                vkunum = VkuNum(T);
                if (T % 2 != 0)
                    foreach (var item in tag_GR)
                    {
                        if (i == vkunum)
                        {
                            var tag_G = tag_GR.SelectNodes("G");
                            if (tag_G != null)
                            {
                                XmlAttributeCollection documentAttributes = ((XmlNode)item).Attributes;
                                if (documentAttributes != null)
                                {
                                    foreach (XmlAttribute documentAttribute in documentAttributes)
                                    {
                                        switch (documentAttribute.Name)
                                        {
                                            case "V":
                                                var vkuobj = documentAttribute.Value.Trim();
                                                if (vkuobj != "")
                                                {
                                                    res = XmlConvert.ToInt64(documentAttribute.Value);
                                                }
                                                else res = -1;
                                                evenVKU = res;
                                                break;
                                        }
                                    }
                                }
                            }
                        }
                        i++;
                    }
                else res = evenVKU;
            }
            return res;
        }
        private string getUch(XmlNode B, int T)
        {
            string res = "";
            var tag_GR = B.SelectSingleNode("GR");
            if (tag_GR != null)
            {
                int i = 1;
                int vkunum = 0;
                vkunum = UchNum(T);
                if (T % 2 != 0)
                    foreach (var item in tag_GR)
                    {
                        if (i == vkunum)
                        {
                            var tag_G = tag_GR.SelectNodes("G");
                            if (tag_G != null)
                            {
                                XmlAttributeCollection documentAttributes = ((XmlNode)item).Attributes;
                                if (documentAttributes != null)
                                {
                                    foreach (XmlAttribute documentAttribute in documentAttributes)
                                    {
                                        switch (documentAttribute.Name)
                                        {
                                            case "V":
                                                res = documentAttribute.Value;
                                                evenUCH = res;
                                                break;
                                        }
                                    }
                                }
                            }
                        }
                        i++;
                    }
                else
                {
                    res = evenUCH;
                    evenUCH = "";
                }
            }
            return res;
        }
        private int VkuNum(int T)
        {
            int res = 0;
            using (var sqlconn = new SqlConnection(conn.Connection()))
            {
                using (var sqlcomm = new SqlCommand("SELECT G_N FROM [vshp2016_reg].[dbo].[tag_VKU] where B_T="+T, sqlconn))
                {
                    sqlconn.Open();
                    using (var reader = sqlcomm.ExecuteReader())
                        while (reader.Read())
                        {
                            res = reader.GetInt32(0);
                        }
                }
            }
            return res;
        }
        private int UchNum(int T)
        {
            int res = 0;
            using (var sqlconn = new SqlConnection(conn.Connection()))
            {
                using (var sqlcomm = new SqlCommand("SELECT G_N FROM [vshp2016_reg].[dbo].[tag_UCH] where B_T=" + T, sqlconn))
                {
                    sqlconn.Open();
                    using (var reader = sqlcomm.ExecuteReader())
                        while (reader.Read())
                        {
                            res = reader.GetInt32(0);
                        }
                }
            }
            return res;
        }

Вот этот кусочек кода обрабатывает несколько xml-ок ну очень долго
0
19 / 18 / 14
Регистрация: 06.03.2013
Сообщений: 335
31.08.2016, 07:06  [ТС] 12
ну а с bulk'ом разобрался:
Кликните здесь для просмотра всего текста
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
        private void Upload_Click(object sender, RoutedEventArgs e)
        {
            Upload.IsEnabled = false;
            Dictionary<int, int> blmapping = new Dictionary<int, int>();
            Dictionary<int, int> grmapping = new Dictionary<int, int>();
            var blt = BLtable;
            var grt = GRtable;
            blmapping.Add(5, 0);
            blmapping.Add(6, 1);
            blmapping.Add(0, 2);
            blmapping.Add(3, 3);
            blmapping.Add(4, 4);
            blmapping.Add(2, 5);
            blmapping.Add(1, 6);
            grmapping.Add(2, 0);
            grmapping.Add(1, 1);
            grmapping.Add(0, 2);
            grmapping.Add(6, 3);
            grmapping.Add(3, 4);
            grmapping.Add(5, 5);
            grmapping.Add(4, 6);
            var timer = Stopwatch.StartNew();
            conn.Truncate("[vshp2016_reg].[dbo].[tag_G]");
            conn.Truncate("[vshp2016_reg].[dbo].[tag_B]");
            conn.Bulk("[vshp2016_reg].[dbo].[tag_B]", blt, blmapping);
            conn.Bulk("[vshp2016_reg].[dbo].[tag_G]", grt, grmapping);            
            timer.Stop();                
            System.Windows.MessageBox.Show("Mission complete in " + timer.ElapsedMilliseconds + "!");
        }
        public void Bulk(string DestTableName,DataTable source, Dictionary<int,int> mappings)
        {
            using (var loader = new SqlBulkCopy(Connection(),SqlBulkCopyOptions.Default))
            {
                foreach(var item in mappings)
                {
                    loader.ColumnMappings.Add(item.Key,item.Value);
                }                
                loader.DestinationTableName = DestTableName;
                loader.WriteToServer(source);
            }
        }

~17 секунд на обрабатывание 50000 строк
0
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
31.08.2016, 10:54 13
ILKarina, т.е. сейчас данные нормально импортируются в БД, но осталась проблема с производительностью?

Это критично?

Скиньте XML посмотреть, желательно самый большой.

Добавлено через 2 минуты
Цитата Сообщение от ILKarina Посмотреть сообщение
~17 секунд на обрабатывание 50000 строк
17 секунд происходит выполнение двух SqlBulkCopy?
0
19 / 18 / 14
Регистрация: 06.03.2013
Сообщений: 335
31.08.2016, 11:17  [ТС] 14
Цитата Сообщение от golubyatnikovtv Посмотреть сообщение
17 секунд происходит выполнение двух SqlBulkCopy?
да, инсертами выполнялся около получаса если не крашился

Добавлено через 3 минуты
Да, это критично, потому что эти файлы всего лишь маааалюсенькая часть того что надо будет обработать
0
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
31.08.2016, 12:18 15
Лучший ответ Сообщение было отмечено ILKarina как решение

Решение

ILKarina, в процессе парсинга у Вас выполняется множество запросов в БД. Избавьтесь от этого. Сперва загрузите все необходимые данные в память из базы, потом их используйте при парсинге. Ускорение должно быть не на один порядок.
1
19 / 18 / 14
Регистрация: 06.03.2013
Сообщений: 335
31.08.2016, 14:00  [ТС] 16
golubyatnikovtv, Спасибо понял свою ошибку
0
19 / 18 / 14
Регистрация: 06.03.2013
Сообщений: 335
22.09.2016, 06:00  [ТС] 17
golubyatnikovtv, добрый день! Можете помочь с еще одной проблемой
У меня возник небольшой казус: Переполнение памяти при использовании DataTable. Примерно около 1к файлов в которых по несколько тысяч строк.
Вложения
Тип файла: rar MainWindow.xaml.rar (5.7 Кб, 1 просмотров)
0
22.09.2016, 06:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.09.2016, 06:00
Помогаю со студенческими работами здесь

Быстрое чтение большого файла. Зависает процесс
Всем доброго времени суток. Есть задача прочитать файл(1-20 мб), который состоит из слов...

Максимально быстрое чтение очень большого файла
Добрый день, задача прочитать очень большой файл (1GB-10GB+). Нужно провести операцию с каждой...

Быстрое создание большого массива элементов управления
Привет всем! У меня есть некоторый пользовательский (свой) элемент управления. Подскажите,...

Падает сайт изза большого количество подключений к базе данных
Вот буквально 3-4 дня назад столкнулся с такой проблемой: сайт, а в месте с ним и форум отключаются...


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

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