Разработайте эффективный пользовательский интерактивный журнал событий, чтобы я не превысил ограничение в 10000 пользовательских объектов.
У меня проблема: в моем приложении я получаю некоторую информацию, связанную с событием, поэтому для события x я должен получить окно формы, в котором я делаю какие-то вещи (введите текст и нажмите кнопку)
Моя проблема в том, что для моего приложения существует ограничение в 10000 пользовательских объектов (как и для всех приложений на C#), а для моего существующего кода уже занято 3000 пользовательских объектов (так что остается около 7000 пользовательских объектов свободными). Я получаю от 200 клиентов информацию о событиях, касающихся некоторых вещей, происходящих на каждом из клиентов.
Когда я получаю информацию о событии от клиента, я бы хотел как-то отобразить ее в виде метки в окне журнала событий, и когда я щелкну метку, должно появиться окно конкретной формы (о котором я упоминал ранее), чтобы я мог введите текст и нажмите на кнопку.
Мне нужно иметь возможность эффективно отображать это окно журнала событий (потому что я мог получить до 1000 событий от каждого клиента и если каждая метка в этом журнале занимает 1 объект, это означает, что для каждого клиента будет 1000 объектов (максимум, но возможно)) так что я бы превысил мой предел в 10000).
Как я могу сделать что-то эффективно?
В настоящее время для каждого события я запускаю окно формы, в которое я ввожу текст и нажимаю на кнопку, но это неэффективно (потому что мое окно формы занимает уже 3 пользовательских объекта, и если у меня есть максимум 3 * 200 клиентов * 1000 пользовательских объектов, я превышаю мой предел 7000 далеко).
2 ответа
Я изо всех сил пытаюсь увидеть, как вы можете получить тысячи окон из пользовательского интерфейса, как это. Если вы создадите один элемент управления меткой для каждого отдельного уведомления, то да, это может быстро выйти из-под контроля. Делает это ужасно медленно тоже.
Не используйте элементы управления метками, используйте ListBox, ListView, TreeView или DataGridView. Элементы управления, которые могут отображать несколько элементов, но используют только один дескриптор окна.
Как сказал Ганс Пассант, Win32 не предназначен для использования в том виде, в каком вы пытаетесь его использовать.
Типичная реализация может выглядеть так:
Если элементов много (несколько тысяч, как вы ожидаете), поле быстрого поиска для фильтрации элементов в списке почти обязательно.
Если детали сложны, вы можете заменить статический элемент управления веб-браузера на HTML, сгенерированный на лету.
Если вы настаиваете на кнопках для каждого события (что я бы не рекомендовал для вашего UX), вам нужно будет сделать это самостоятельно, что является PITA в GDI. Или используйте элемент управления веб-браузера