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

Как использовать оперативную память рационально?

06.12.2015, 18:20. Показов 3365. Ответов 55
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Есть код программы, где я сравниваю 2 текстовых файла, и если n-строка в первом не находит идентичную во втором, то она записывается в новый файл. Файлы большие и при j=167772 вылазит ошибка - Необработанное исключение типа "System.OutOfMemoryException" в 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
List<string> iskl1 = new List<string>();
            List<string> isklob = new List<string>();
            StreamReader sr1iskl = new StreamReader("D:\\Program\\farVariant.txt");
            string stroka1;
            while ((stroka1 = sr1iskl.ReadLine()) != null)
            { iskl1.Add(stroka1); }
            List<string> iskl2 = new List<string>();
            StreamReader sr2iskl = new StreamReader("D:\\Program\\IskVariantOB.txt");
            string stroka2;
            while ((stroka2 = sr2iskl.ReadLine()) != null)
            { iskl2.Add(stroka2); }
            for (int j = 0; j < iskl1.Count; j++)
            {
                for (int i = 0; i < iskl2.Count; i++)
                {
                    if (iskl1[j] != iskl2[i])
                    {
                        isklob.Add(iskl1[j]);
                    }
                }
 
            } File.WriteAllLines("D:\\Program\\variantfinal.txt", isklob);
Пытаясь найти решение, я полез в интернет и наткнулся на тему "LINQ и итераторы" где возможен вариант, когда мы не держим полный объем данных в памяти, а обрабатываем от начала до конца все данные поэлементно. Мы всего раз проходим по всему объему данных и держим в памяти всего один элемент данных, то есть одну строку.

Там прилагается код подобный моему
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
using System;
using System;
using System.Collections.Generic;
using System.Text;
 
namespace EnumerableDemo.Bad
{
 public class StringTransformer
 {
  IDictionary<string, string> _catalog = new Dictionary<string, string>
  {
   {"012345", "Car"},
   {"012346", "Bus"},
   {"012347", "Train"}
  };
 
  public StringTransformer()
  {
   _catalog.Add("%Date%", DateTime.Now.ToString("d"));
  }
 
  public IList<string> Transform(IList<string> strs)
  {
   var list = new List<string>();
 
   foreach (var item in strs)
   {
    var builder = new StringBuilder(item);
    foreach (var key in _catalog.Keys)
    {
     builder.Replace(key, _catalog[key]);
    }
    list.Add(builder.ToString());
   }
 
   return list;
  }
 }
}
И предлагается решение в виде
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
using System;
using System.Collections.Generic;
using System.IO;
 
namespace EnumerableDemo.Good
{
 class MainClass
 {
  public static IEnumerable<string> ReadInput()
  {
   using (var file = File.OpenText("input.txt"))
   {
    while (!file.EndOfStream)
    {
     yield return file.ReadLine();
    }
   }
  }
 
  public static void WriteOutput(IEnumerable<string> strs)
  {
   using (var file = File.CreateText("output.txt"))
   {
    foreach (var str in strs)
    {
     file.WriteLine(str);
    }
   }
  }
 
  public static void Main(string[] args)
  {
   var stringTransformer = new StringTransformer();
   var input = ReadInput().Where(str=>str.Length > 5);
   var transformed = stringTransformer.Transform(input);
   WriteOutput(transformed);
  }
 }
}
Можно ли как-нибудь мне сделать аналогично? Чтоб не насиловать память и уменьшить время обработки?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.12.2015, 18:20
Ответы с готовыми решениями:

Можно-ли использовать флэшку как оперативную память?
Действительно-ли можно увеличить оперативную память при помощи флэшки? Что скажите о программе &quot;eBoostr&quot;?

Можно ли использовать оперативную память от ноутбука на компьютере?
Может конечно странный вопрос, но тем не менее... Есть убитый ноут, экран треснул, можно ли каким либо чудом использовать возможности...

Windows позволяет использовать не всю оперативную память
Всем привет Такая проблема. Windows позволяет использовать не всю оперативную память. Во вкладке ОЗУ : Общий объём - 12 гб (доступно...

55
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
07.12.2015, 23:14
Студворк — интернет-сервис помощи студентам
kolorotur, вы по поводу стабильности сортировок почитайте про quicksort особенно ту часть в которой говориться о том что она дает не стабильные результаты, и нечего 90% контейнеров и разработчиков ее используют и в ус не дуют
Storm23 е ще раз повторюсь не нравиться функция хеширования возьмите любую другую, Crc64 к примеру ну или md5 или сами придумайте, мне все равно, а 12000 из 10 000 000... просто решаются введением 2 функции хеширования если появляется коллизия, тут да немного не доработал, но я не думаю что это смертельно особенно если тестить адекватно, вопрос в другом в том что идеальных хеш функций не существует как бы вы себя не убеждали, просто бывает мало данных :-D, а на счет 0,12% еще раз повторюсь это не смертельно и приемлемо решается введением 2 функции хеширования именно для этих 12000 коллизий
P. S. тем более реализация HashSet в C# недоступна без лишних тело движений и кто знает может там юзаются в качестве первой и второй хеш функции более слабые функции чем вычисление CRC32
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
07.12.2015, 23:30
Цитата Сообщение от агерон Посмотреть сообщение
вы по поводу стабильности сортировок почитайте про quicksort особенно ту часть в которой говориться о том что она дает не стабильные результаты
Вы действительно не понимаете разницу между неустойчивой сортировкой и отсутствием сортировки?
Хотите, объясню?

По поводу хэшей — если это не достаточно криптостойкий хэш, то он никогда не используется для быстрой проверки на идентичность — именно по причинам, описанным выше и продемонстрированным в вашем тесте. Все эти CRC используются для быстрой проверки на неидентичность и в случае совпадения требуют полной проверки на равенство. А если использовать криптостойкие алгоритмы, то для данной задачи и по памяти и по времени будет проще делать обычную проверку на строки.

Цитата Сообщение от агерон Посмотреть сообщение
кто знает может там юзаются в качестве первой и второй хеш функции более слабые функции чем вычисление CRC32
Там используется метод GetHashCode, который может вообще тупо возвращать 0, то есть быть никаким хэш-алгоритмом. Это напрочь убивает производительность, но все равно гарантирует, что объект будет найден/опознан, т.к. все равно производится полная проверка на равенство. По причине, описанной в предыдущем абзаце.

Прошу прощения, что ответил на не мне адресованный текст.
0
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
08.12.2015, 00:25
Или если алгоритм сортировки, который в 5% случаев оставляет пару элементов не отсортированными — это ничего страшного, инженерная погрешность? Или все-таки неправильная работа алгоритма?
Неустойчивый QuickSort по сути данная сортировка может отсортировать а может и не отсортировать входные данные, тут все зависит от удачных или не очень входных данных так что не нужно мне про сортировки расказывать

Добавлено через 7 минут
а про GetHashCode.... можно вообще поэму написать про корректность его использования :-D так что я с опаской отношусь к алгоритмам и структурам данных в которых используется дефолтный GetHashCode
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
08.12.2015, 00:41
Цитата Сообщение от агерон Посмотреть сообщение
по сути данная сортировка может отсортировать а может и не отсортировать входные данные, тут все зависит от удачных или не очень входных данных так что не нужно мне про сортировки расказывать
Не в обиду будет сказано, но судя по тому, что вы пишете, про сортировки вам надо рассказывать, начиная с самых азов.
Если есть строка вида "Мама", буквы в которой нужно отсортировать по алфавиту без учета регистра, то любой рабочий алгоритм сортировки сделает один из двух вариантов:
1. "ааМм"
2. "аамМ"
Оба варианта соответствуют задаче "отсортировать без учета регистра", в обоих вариантах массив отсортирован.

Устойчивым алгоритмом сортировки называют такой, который всегда выдаст первый вариант, а неустойчивым — который может выдать второй вариант.

Еще раз обращаю внимание: в обоих случаях ряд отсортирован в соответствии с поставленным условием.
При этом устойчивость не является необходимым свойством алгоритма сортировки (любого, не только быстрой) — это может быть "приятным дополнением".
Вот если бы алгоритм выдал решение вида "амМа", то он был бы вообще не рабочий, т.к. задача по сортировке не выполнена, даже если бы такой вариант был только в 5% случаев, как предлагаете вы со своим решением.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.12.2015, 00:49
Цитата Сообщение от kolorotur Посмотреть сообщение
Устойчивым алгоритмом сортировки называют такой, который всегда выдаст первый вариант, а неустойчивым — который может выдать второй вариант.
Нет, устойчивым будет тот, который всегда возвращает один вариант, а первый или второй - детали реализации.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
08.12.2015, 00:58
Цитата Сообщение от Psilon Посмотреть сообщение
устойчивым будет тот, который всегда возвращает один вариант, а первый или второй - детали реализации.
Устойчивый — это тот, который сохраняет относительное расположение элементов с одинаковыми ключами сортировки.
Если "М" во входном массиве была перед "м", то в устойчивой сортировке в выходном она так же будет идти перед "м".
0
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
08.12.2015, 01:15
видимо на на строке Мама Вы его и использовали...
эххх

Недостатки QuckSort:

Сильно деградирует по скорости при неудачных выборах опорных элементов, что может случиться при неудачных входных данных. Этого можно избежать, используя такие модификации алгоритма, как Introsort, или вероятностно, выбирая опорный элемент случайно, а не фиксированным образом.
Наивная реализация алгоритма может привести к ошибке переполнения стека, так как ей может потребоваться сделать вложенных рекурсивных вызовов. В улучшенных реализациях, в которых рекурсивный вызов происходит только для сортировки меньшей из двух частей массива
Неустойчив — если требуется устойчивость, приходится расширять ключ.

Факт не в том что Qsort не будет сортировать в 5% случаев, а в том что при малой длине ключа он МОЖЕТ некорректно сработать на пример при сортировке от большего к меньшему СЛУЧАЙНО может затесаться 1 или 2 элемента которые действительно будут не на своих местах к примеру у вас есть набор данных

"111 111"
"123 333"
"123 222"
"145 444"
"145 555"

и соответственно после сортировки quickSort вы ожидаете увидеть
"111 111"
"123 222"
"123 333"
"145 444"
"145 555"

но тут у вас случайно случаеться сюрпрайз т. к. алгоритмом был выбран не верный опорный элемент
"111 111"
"123 333"
"123 222"
"145 444"
"145 555"

вроде и отсортирован, да не совсем, и да ошибку такую сразу сложно заметить, но видите ли такую коллизию очень сложно подобрать т. к. для этого нужно реально "плохие" данные и неудачный компаратор типа основанного на дефолтном GetHashCode, а так да библиотечные функции в 90% случаев вылизаны очень и очень сильно
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
08.12.2015, 01:49
Цитата Сообщение от агерон Посмотреть сообщение
при малой длине ключа он МОЖЕТ некорректно сработать на пример при сортировке от большего к меньшему СЛУЧАЙНО может затесаться 1 или 2 элемента которые действительно будут не на своих местах
"Малая длина ключа" — это о чем? 8-битное число — это малая длина ключа? А 16-битное? 32-битное? Строка из 32 тысяч символов?
Хотелось бы увидеь конкретный пример данных и выбранного опорного элемента, подтверждающих ваше утверждение.
Ну или хотя бы ссылку на опубликованную работу, где обсуждаются такие серьезные проблемы быстрой сортировки. Автора и год публикации будет достаточно — дальше сам найду.

Цитата Сообщение от агерон Посмотреть сообщение
для этого нужно реально "плохие" данные и неудачный компаратор
Так извините, если алгоритму скормили кривой компаратор, то любая сортировка не будет сортировать — это проблема не в алгоритме сортировки.
Именно отсюда и растут ноги у (довольно странных) алгоритмов перемешивания, где используется сортировка с компаратором вида return random.Next();
И что конкретно означают "плохие" данные, если все упирается в компаратор и его реализацию?

Цитата Сообщение от агерон Посмотреть сообщение
видимо на на строке Мама Вы его и использовали...
Хосспади, ну что за детсад-то устроили?
Ведите себя прилично — не на базаре же, время успокоиться и написать, не паясничая, — имеется.
0
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
08.12.2015, 03:06
думаю далеко ходить не надо тут же на форуме: Быстрая сортировка Хоара от mik-a-el и коммент к реализации раз
Статья на Хабре с наивной реализацией алгоритма два
и не надо про то что в C# подобного нет, для данной сортировки может и нет, все же "детские болезни" именно данной сортировки за 40 лет научились решать, а вот многострадальный GetHashCode все склоняют в хвост и в гриву а он составная часть мнооогих компараторов и реализаций алгоритмов и структур данных
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.12.2015, 04:55
kolorotur, окей, соглашусь. Хотя тут стоит обговаривать. Сортировка, которая меняет расположение элементов, но делает это всегда предсказуема тоже в некотором роде устойчивая.

агерон, GetHashCode никогда не считался гарантом одинаковости. Он говорит лишь о том, что если он различается, то объекты разные. ВСЁ. элементарная логика говорит о том, что a => b не означает, что b => a.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
08.12.2015, 10:25
Цитата Сообщение от агерон Посмотреть сообщение
Быстрая сортировка Хоара от mik-a-el и коммент к реализации
Так там же баг в конкретной реализации алгоритма, а не в самом алгоритме.

Цитата Сообщение от агерон Посмотреть сообщение
Статья на Хабре с наивной реализацией алгоритма
Интересная статья, спасибо за ссылку.
Но про описанную вами проблему сортировки (точнее, ее отсутствия) там, к сожалению, ни слова не сказано.

Цитата Сообщение от агерон Посмотреть сообщение
все же "детские болезни" именно данной сортировки за 40 лет научились решать
"Детские болезни" этой сортировки состоят в деградировании скорости при определенных условиях, большой глубины рекурсии и неустойчивости.
Неупорядочивание части массива пока что нигде не упоминается.

Цитата Сообщение от Psilon Посмотреть сообщение
Сортировка, которая меняет расположение элементов, но делает это всегда предсказуема тоже в некотором роде устойчивая.
Это вы говорите о детерминистической (deterministic) сортировке. Устойчивая (stable) — это немного другое, как описано выше
1
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
08.12.2015, 11:36
нуууу... вы явно как минимум не внимательны

цитата с статьи хабра

Наивный QuickSort
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
public void QuickSort(int left, int right)
 {
  int l = left;
  int r = right;
  int avg = array[(l + r) / 2)];
   do
    {
      while (array[l] < avg)
       ++l;
      while (array[r] > avg)
       --r;
      if (l <= r)
       {
         if (l < r)
           {
             int temp = array[l];
             array[l] = array[r];
             array[r] = temp;
           }
         ++l;
         --r;
        }
     }
    while (l <= r);
  if (left < r)
    QuickSort(left, r);
  if (l < right)
    QuickSort(l, right);
Вышеописанный алгоритм сортировки имеет следующие недостатки:

Поскольку опорный элемент выбирается как середина массива, то возможен случай, когда это будет всегда максимум, в результате чего массив будет разбиваться на две части длинною n — 1 и 1 и скорость алгоритма деградирует до O(n2);
При вышеописанных условиях глубина рекурсии достигает O(n), в результате чего при больших n может произойти переполнение программного стека;
Алгоритм неустойчив, то есть он меняет элементы с одинаковыми значениями. На примере сортировки чисел это ни как не сказывается, но если мы сортируем массив объектов по какому-либо свойству то это существенно, так как в результате нескольких вызовов метода Sort будем получать массив элементы которого отличаются порядком.
выделю персонально для вас

Алгоритм неустойчив, то есть он меняет элементы с одинаковыми значениями. На примере сортировки чисел это ни как не сказывается, но если мы сортируем массив объектов по какому-либо свойству то это существенно, так как в результате нескольких вызовов метода Sort будем получать массив элементы которого отличаются порядком.


ну уж извените если прямая реализация алгоритма QuickSort 3 раза мне выдаст
"111 111"
"123 222"
"123 333"
"145 444"
"145 555"

а на четвертый раз с перепугу я получу
"111 111"
"123 333"
"123 222"
"145 444"
"145 555"

я как минимум буду в недоумении, заметь что "детские болезни" реализации были побеждены к версии Net 4.5 т. е. на доводку алгоритма ушло минимум 10 лет! или сколько там прошло после выпуска первого .Net
И согласитесь что внутри функция Sort ну как минимум сильно изменилась а как максимум совсем слабо связана с QickSort
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.12.2015, 12:12
Цитата Сообщение от агерон Посмотреть сообщение
Алгоритм неустойчив, то есть он меняет элементы с одинаковыми значениями.
Тут ничего не говорится о том, что он меняет элементы с разными значениями не так, как должен.

Добавлено через 1 минуту
Это значит что в 100000 раз можно получить такую последовательность:

"123 222"
"111 111"
"145 555"
"123 333"
"145 444"

что конечно же никогда не случиться ни с одним из алгоритмов сортировки (не путать с реализацией).
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
08.12.2015, 12:36
Цитата Сообщение от агерон Посмотреть сообщение
вы явно как минимум не внимательны
Не в данном случае.

Цитата Сообщение от агерон Посмотреть сообщение
выделю персонально для вас
Я этот абзац читал.

Цитата Сообщение от агерон Посмотреть сообщение
Алгоритм неустойчив
Еще разок, пишу медленно: не путайте неустойчивость сортировки с отсутствием сортировки.

Цитата Сообщение от агерон Посмотреть сообщение
ну уж извените если прямая реализация алгоритма QuickSort 3 раза мне выдаст
"111 111"
"123 222"
"123 333"
"145 444"
"145 555"
а на четвертый раз с перепугу я получу
"111 111"
"123 333"
"123 222"
"145 444"
"145 555"
Если вы сортируете массив строк только по первым трем символам (или по первому слову, если угодно), то в обоих случаях массив считается отсортированным по первым трем символам (или по первому слову) — вне зависимости от используемого алгоритма сортировки.
Если вы сортируете массив строк по всем символам, то второй результат у вас никогда не получится, хотя вы, похоже, пытаетесь убедить меня в обратном.
0
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
08.12.2015, 12:48
будьте при своем мнении, что у вас все хорошо, и что QuckSort алгоритм который всегда выдает стабильный результат, по сути начали за здравие кончили за упокой я думаю что пора прекратить этот флейм
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.12.2015, 12:56
агерон, сортировка либо выполнена, либо не вы полнена. Алгоритмы, которые выполняют сортировку почти всегда - не существует и они нигде не используются. Даже эзотерические сортировки вроде гномьей выполняются, пока массив не отсортируется. Что считать ключом сортировки - всю строку, какие-то символы, рандом - совершенно не важно. Важно, что в итоге после выполнения сортировки верен предикат
https://www.cyberforum.ru/cgi-bin/latex.cgi?\forall i \forall j, i < j \Rightarrow  Key({x}_{i}) \leq Key({x}_{j})
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
08.12.2015, 13:01
Цитата Сообщение от агерон Посмотреть сообщение
будьте при своем мнении, что у вас все хорошо
Да неплохо, в общем-то, спасибо

Цитата Сообщение от агерон Посмотреть сообщение
и что QuckSort алгоритм который всегда выдает стабильный результат
А никто и не говорит, что QuickSort всегда выдает стабильный (устойчивый) результат.
Вам лишь говорят о том, что он всегда сортирует по заданному ключу и никогда не нарушает предикат, описанный выше товарищем Psilon, а вы пытаетесь доказать обратное, но так и не предоставили конкретных примеров, где это происходит.
0
1 / 1 / 0
Регистрация: 11.09.2015
Сообщений: 25
09.12.2015, 00:17  [ТС]
kolorotur, Зашел сегодня спросить еще кое-что и увидел такой ожесточенный спор, в котором я понял немногое. Собственно, что хотел спросить. А если мне при сравнении файлов нужно будет добавить еще пару условий? Т.е. Есть 2 текстовых файла, в них такие же строки, но они уже будут раза в 2-3 меньше (3 ляма строк и 50 тысяч). Мне их нужно будет сравнить, но уже посимвольно в каждой строке. Задать переменную, которая записывает одинаковое кол-во символов, и если оно входит в какой-то определенный диапазон, например, больше 100 и меньше 500, то строка записывается в новый текстовый файл.
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
List<string> Final = new List<string>();
                List<string> list1 = new List<string>();
                StreamReader SR1 = new StreamReader("D:\\1.txt");
                string string1;
                while ((string1 = SR1.ReadLine()) != null)
                { list1.Add(string1); }
                int s = 0;
                int R = 0;              
                List<string> lis2 = new List<string>();
                StreamReader SR2 = new StreamReader("D:2.txt");
                string string2;
                while ((string2 = SR2.ReadLine()) != null)
                { list2.Add(string2); }
                 for (int j = 0; j < list1.Count; j++)
                 {
                                       
                    for (int i = 0; i < list2.Count; i++)
                    {
                        if (list1[j] != list2[i])
                        {
                            char[] ex1 = new char[list1[j].Length];
                            char[] ex2 = new char[list2[i].Length];
                            for (int k = 0; k < 15; k++)
                            {
                                if (ex1[k] == ex2[k])
                                { s++; }
                            }
                            if (s=10)
                            { R++; }
                            s = 0;
                        }
                    }
 
 
 
                    if (R>100&&R<500)
                    {
                        Final.Add(list1[j]);
                    }
                        R=0;
                } File.WriteAllLines("D:\\3.txt", Final);
Можно же также уменьшить время обработки? У меня на такой способ около часа уходит.
0
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
10.12.2015, 01:55
а теперь объясни снова и внятно по пунктам
0
1 / 1 / 0
Регистрация: 11.09.2015
Сообщений: 25
10.12.2015, 13:50  [ТС]
агерон, Есть 2 текстовых файла, в каждом из которых есть n-ое кол-во строк. Каждая строка теперь составляет ровно 17 символов. Мне нужно также сравнить эти 2 файла, только узнать сколько символов совпадает в каждой строке из первого файла со строками из второго. Мне нужно, чтоб строки совпадали ровно на 10 символов из 17 (позиция также учитывается, если в первой строке символ "3" стоит на третьем месте, а во второй этот же символ стоит на пятом, то за совпадение это не считается). Далее, если для первой строки из первого файла мы нашли от 100 до 500 строк, удовлетворяющих нашему условию (кол-во одинаковых символов = 10), из второго файла, то мы записываем эту строку в новый текстовый файл. И так перебирая каждую.
Я создавал списки для 1-го и 2-го файла. Запустил цикл перебора строк в 1-ом, внутри него запустил цикл перебора строк во втором, внутри него запустил цикл перебора символов. Поставил условие, если кол-во совпадений в строках равен 10, то Увеличить переменную R на 1, проходит перебор строк во втором файле, я смотрю чему равно R, если переменная насобирала от 100 до 500 таких строк, то я записываю строку из первого файла в новый файл.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.12.2015, 13:50

Опасно ли использовать оперативную память без VREF
Всем привет.У меня есть планка ddr 2 на 2 гигабайта.И у неё оторвался маленький конденсатор.Он соединялся с дорожкой,которая идёт к 1...

Возможно ли серверную оперативную память использовать на рабочей станции?
Есть рабочая станция на матери ASUS H61M-D. И камень i7-3770 3.4GHz. Мать имеет 2 гнезда оперативки. В гнёздах стоит по 8 гб на слот. (в...

Как более рационально использовать контрол для справочника?
Есть контрол DropDownList он показывает около 150 значений (например города) и таких разных контронов несколько. Но этот контол должен...

Как освободить оперативную память?
у меня 2 гб оперативы,ос windows 7(x32)которая сжирает почти 1 гб оперативы что можно сделать чтоб освободить оперативную память?

Как поставить оперативную память!?
Доброго времени суток! Подскажите пожалуйста, как поставить оперативную память? На Ноут.Hp 625. Стоит 2Гб, а хочу запихать 4Гб. Micron...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru