Помогите увеличить скорость обработки таблиц)

Art4D

Client
Регистрация
22.08.2014
Сообщения
276
Благодарностей
48
Баллы
28
Есть две таблицы, одна загружается из файла(без редактирования), вторая создается и наполняется в проекте.
Вот код, которым я пользуюсь, обрабатывает вторую таблицу, в среднем за ~400мс, для меня это много(, есть идеи как оптимизировать код?
WTable - таблица из которой берем данные
sourceTable - таблица, которую мы обрабатываем (редактируем)

PHP:
var sourceTable = project.Tables["tabl"];
var WTable = project.Tables["Wtable"];
var a = true;
    for(int i = sourceTable.RowCount-1; i>=0; i--)
    {
        string name = sourceTable.GetCell("A", i);
        for(int j=0; j < WTable.RowCount; j++)
    {
        string Wname = WTable.GetCell("A", j);
        if (name==Wname)
        {
            a = false;
            break;
        }
        a=true;
    }
    if (a==true)
    sourceTable.DeleteRow(i);
    }
 
Последнее редактирование:

Art4D

Client
Регистрация
22.08.2014
Сообщения
276
Благодарностей
48
Баллы
28
UPD. Заменил Wtable на список из данных A столбца и сниппет стал обрабатываться за ~30мс.
Если кто-нибудь, что-то знает по оптимизации обработки таблиц/списков, то напишите свои советы в эту тему, пожалуйста.
Может еще можно что-то сделать?
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 190
Баллы
113
UPD. Заменил Wtable на список из данных A столбца и сниппет стал обрабатываться за ~30мс.
Если кто-нибудь, что-то знает по оптимизации обработки таблиц/списков, то напишите свои советы в эту тему, пожалуйста.
Может еще можно что-то сделать?
Совет простой: не использовать таблицу вообще, все данные хранить в коллекции массива/стека и использовать многопоточность при обработке.
И это все реально, я в своих проектах ни разу не пользовался таблицей, так как в ней вообще нету необходимости никакой, кроме как использование их в качестве сохранения как Excel документ или DataSet для БД
 
  • Спасибо
Реакции: Art4D

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 952
Благодарностей
779
Баллы
113
  • Спасибо
Реакции: Art4D

Art4D

Client
Регистрация
22.08.2014
Сообщения
276
Благодарностей
48
Баллы
28
меня пугают эти слова ((

Как вообще создать массив, который будет храниться в шаблоне?
Я очень плохо знаю C#((
Где можно почитать как применить в зенке, то о чем ты говоришь?
 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 952
Благодарностей
779
Баллы
113
Совет простой: не использовать таблицу вообще, все данные хранить в коллекции массива/стека и использовать многопоточность при обработке.
И это все реально, я в своих проектах ни разу не пользовался таблицей, так как в ней вообще нету необходимости никакой, кроме как использование их в качестве сохранения как Excel документ или DataSet для БД

так в стеке вроде как большой массив не сохранишь, а в массив не добавишь новые элементы и не удалишь, добавить и удалить то конечно можно - если перезаписывать массив, но так это же то же самое что List получится. не знаю, разве увиличится при этом скорость - надо же всё равно в цикле проходить каждую ячейку и заносить в отдельный массив каждый столбец, или какая логика? за счёт чего будет ускорение? каких таких операций не будет, какие есть при обработке List ?
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 190
Баллы
113
меня пугают эти слова ((

Как вообще создать массив, который будет храниться в шаблоне?
Я очень плохо знаю C#((
Где можно почитать как применить в зенке, то о чем ты говоришь?
Походу насчет этого надо бы написать конкурсную тему, а то так и будут все пользоваться таблицами ещё очень долго.
так в стеке вроде как большой массив не сохранишь, а в массив не добавишь новые элементы и не удалишь, добавить и удалить то конечно можно - если перезаписывать массив, но так это же то же самое что List получится. не знаю, разве увиличится при этом скорость - надо же всё равно в цикле проходить каждую ячейку и заносить в отдельный массив каждый столбец, или какая логика? за счёт чего будет ускорение? каких таких операций не будет, какие есть при обработке List ?
Есть коллекция под названием Stack, работает она по принципу LIFO (Last in first out - последний пришел, первый ушел) и противоположность ей - Queue - очередь, в них хранятся ссылки на элементы (в стеке потока), а сами элементы хранятся на куче.
Вкратце пример заготовки будет выглядить так:
Код:
public sealed class Work
    {
        public static Stack<TestElement> st_elem1 = new Stack<TestElement>(1024);
        public static Stack<TestElement> st_elem2 = new Stack<TestElement>(1024);
    }

    public sealed class TestElement
    {
        string Item1 { get; set; }
        int Item2 { get; set; }
        bool Item3 { get; set; }

        public TestElement(string item1, int item2, bool item3)
        {
            this.Item1 = item1;
            this.Item2 = item2;
            this.Item3 = item3;
        }
    }
Остается только добавлять/удалять элементы при необходимости, а также можно легко сравнивать их. Но для полноценной работы нужно знать полностью какого типа переменные надо хранить, сколько их
Добавлять элемент можно из кубика таким образом:
Код:
st_elem1.Push(new TestElement("test", 11, true));
 
Последнее редактирование:
  • Спасибо
Реакции: Art4D

Nick

Client
Регистрация
22.07.2014
Сообщения
1 961
Благодарностей
796
Баллы
113
Автор, так у вас же в коде написано, что из исходной таблицы строки удаляются: sourceTable.DeleteRow(i);
Если вам нужна скорость, то таблицу отвязывайте от файла, пусть она в памяти обрабатывается. При желании в самом конце сохраняйте её на диск.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 605
Благодарностей
4 595
Баллы
113
Автор, так у вас же в коде написано, что из исходной таблицы строки удаляются: sourceTable.DeleteRow(i);
Если вам нужна скорость, то таблицу отвязывайте от файла, пусть она в памяти обрабатывается. При желании в самом конце сохраняйте её на диск.
она в любом случае обрабатывается в памяти
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 099
Баллы
113

Nick

Client
Регистрация
22.07.2014
Сообщения
1 961
Благодарностей
796
Баллы
113

doc

Client
Регистрация
30.03.2012
Сообщения
8 605
Благодарностей
4 595
Баллы
113

Art4D

Client
Регистрация
22.08.2014
Сообщения
276
Благодарностей
48
Баллы
28
...но не в любом случае идёт синхронизация с диском, который медленнее памяти в 100 раз
sourceTable в моем случае вообще не привязана к файлу, она в проекте создается (без привязки к файлу), я плохо в первом посте описал просто(
Просто таблицы из зенно, работают очень очень медленно, даже если, они обрабатываются в памяти.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)