2013-10-09 3 views
-3

Ниже приведен код моего кода для создания списка URL-адресов.System.OutofMemoryException с использованием C#

List<string> urls = new List<string>(); 
int curr_Page = 1; 
int end_Page = 2000; 

for(int pages = curr_Page; pages < end_Page;pages++) 
{ 
    for (int cno = 1;cno < 126001; cno++) 
    { 
      urls.Add("http://sources.domerig.com/list.php?cno=" + cno.ToString() + "&page=" + pages.ToString()); 
    } 
} 
return ScriptUtils.ArrayToDataTable("url", urls.ToArray()); 
} 

Приведенный выше код дает SystemOutOfMemoryException.

У вас есть решение проблемы.

Спасибо

+0

что делает ScriptUtils.ArrayToDataTable делать? – adt

+3

Это создаст список из 251.875.999 строк * размер строки в mem. Зачем вам нужен список из 252 миллионов URL? –

+1

@JeroenvanLangen На самом деле, он создаст список из 251.874.000 строк :) –

ответ

4

Это создаст список 251,874,000 строк. Затем вы создаете из него новый массив с ToArray. После этого вы вызываете ArrayToDataTable, который создает sems для создания нового DataTable.

И вам интересно, почему вы получаете OutOfMemoryException? Зачем?

Если вам нужно создать DataTable с один столбец Url, вы можете сделать это в первую очередь:

DataTable tblUrls = new DataTable(); 
tblUrls.Columns.Add("Url"); 
for(int pages = curr_Page; pages < end_Page;pages++) 
{ 
    for (int cno = 1;cno < 126001; cno++) 
    { 
     tblUrls.Rows.Add("http://sources.domerig.com/list.php?cno=" + cno.ToString() + "&page=" + pages.ToString()); 
    } 
} 
+2

Downvote? Просто почему? Это кажется вполне логичным ответом. –

+0

Спасибо Тиму за ответ, но мне интересно, есть ли способ изменить код, чтобы найти решение этого. – user2806353

+0

@ user2806353: Что не так с моим предложением создать «DataTable» в первую очередь без списков и массивов? –

Смежные вопросы