ahmed_sa Ответов: 3

Когда генерируется 10000 матричный штрих код это занимает слишком много времени как сделать генерацию занять несколько секунд


Проблема

При генерации матричного 2d штрих кода требуется на 10000 файлов генерировать матричный штрих код

это займет 1 минуту .

так что как генерировать матрицу штрих-кода 2d за меньшее время, как секунды .

мой код как показано ниже в разделе генерация кнопок :

Class1 CLS = new Class1();
                DataTable dt = CLS.ShowalldataSerial(textBox4.Text);

                for (int i = 0; i <= Convert.ToInt32(textBox1.Text); i++)
                {
                    Serial = SRL.Rnd().ToString();
                    txt = "UserID" + dt.Rows[0][0] + "FirmName" + dt.Rows[0][1] + "OrderNo" + dt.Rows[0][2] + "BtachNo" + dt.Rows[0][3] + "Quantity" + dt.Rows[0][4] + "ProductName" + dt.Rows[0][5] + "SerialNo" + Serial;

                    dm.DM(txt, Color.FromName(comboBox1.SelectedItem.ToString()), Color.White).Save(root + "\\" + Serial + ".emf", System.Drawing.Imaging.ImageFormat.Emf);

                }
                MessageBox.Show("Records generated success ");



при создании 10000 в textbox1 это займет минуту, если я напишу

200000 в текстовом поле 1 это займет 20 минут

Код работает без каких-либо проблем и дает мне результат, который мне нужен

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

так что то, что я делаю, чтобы сделать генерацию матричного штрих-кода очень быстрой .

Что я уже пробовал:

when generate 10000 matrix bar code it take too much time How to make generating take seconds

Patrice T

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

CHill60

Купите машину с более высокой скоростью ввода-вывода.
Этот код немного быстрее, чем конкатенация строк

txt = String.Format("UserID{0}FirmName{1}OrderNo{2}BtachNo{3}Quantity{4}ProductName{5}SerialNo{6}",
                                dt.Rows[0][0], dt.Rows[0][1], dt.Rows[0][2], dt.Rows[0][3], dt.Rows[0][4], dt.Rows[0][5], Serial);

Но, как намекнул @ppolymorphe, кому понадобятся 200 000 штрих-кодов за считанные секунды?

ahmed_sa

Я спрашиваю, есть ли что-нибудь, что может сделать мою генерацию быстрее

ahmed_sa

это не для пользователя это для фармацевтической компании нужно распечатать штрих код на упаковках медикаментов

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

ahmed_sa

может ли кто-нибудь ответить за меня в комментарии, чтобы прояснить, что мне нужно

3 Ответов

Рейтинг:
2

Jochen Arndt

Как уже предлагалось, переместите любые постоянные данные из цикла и избегайте использования локальных и временных переменных внутри цикла (особенно тех, которые используют динамическое распределение памяти, например строки):

int items = Convert.ToInt32(textBox1.Text);
string txtBase = "UserID" + dt.Rows[0][0] + "FirmName" + dt.Rows[0][1] + "OrderNo" + dt.Rows[0][2] + "BtachNo" + dt.Rows[0][3] + "Quantity" + dt.Rows[0][4] + "ProductName" + dt.Rows[0][5] + "SerialNo";
Color color = Color.FromName(comboBox1.SelectedItem.ToString());
string filePath = root + "\\";
string fileName;
// Note: This will create items + 1 labels!
for (int i = 0; i <= items; i++)
{
    Serial = SRL.Rnd().ToString();
    txt = txtBase + Serial;
    fileName = filePath + Serial + ".emf";
    dm.DM(txt, color, Color.White).Save(fileName, System.Drawing.Imaging.ImageFormat.Emf);
}
Это должно сократить общее время выполнения. Но самая трудоемкая операция-это создание файла, которое нельзя ускорить, и, возможно, DM() вызов.

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


Рейтинг:
1

CHill60

Я предлагаю, чтобы у вас было несколько потоков, пишущих эти штрих-коды - см. Асинхронное Программирование[^]

В качестве отступления сделайте себе и всем остальным одолжение и прекратите использовать автоматически сгенерированные имена для объектов Class1, textBox1, textBox4 и т. д. Они могут что-то значить для вас сейчас, но они будут бессмысленны для вас через 6 месяцев, когда вам придется вернуться к этому коду. В данный момент это просто заставляет вас выглядеть очень непрофессионально.


Рейтинг:
0

Patrice T

В этой строке:

txt = "UserID" + dt.Rows[0][0] + "FirmName" + dt.Rows[0][1] + "OrderNo" + dt.Rows[0][2] + "BtachNo" + dt.Rows[0][3] + "Quantity" + dt.Rows[0][4] + "ProductName" + dt.Rows[0][5] + "SerialNo" + Serial;

, большая часть постоянна в цикле:
"UserID" + dt.Rows[0][0] + "FirmName" + dt.Rows[0][1] + "OrderNo" + dt.Rows[0][2] + "BtachNo" + dt.Rows[0][3] + "Quantity" + dt.Rows[0][4] + "ProductName" + dt.Rows[0][5] + "SerialNo"

Перемещая постоянную часть за пределы цикла, вы должны сэкономить некоторое время.
Цитата:
корень + "\\" + сериал + ".ЭДС"

Вы сохраняете каждый штрих-код в отдельном файле в корне жесткого диска ?

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


ahmed_sa

так что, пожалуйста, если это возможно, как писать .функция сохранения
root + "\ \ " + Serial +". emf " для большей скорости и производительности
пожалуйста любой может ответить за меня

Patrice T

Нужно было бы знать, что и почему из этой функции.

ahmed_sa

есть ли какой-либо способ создать файлы матрицы данных штрих-кода без использования save
если есть Пожалуйста скажите мне
потому что я не знаю