легкий инструментарий для приложения winforms - PullRequest
2 голосов
/ 17 ноября 2008

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

Это приложение winforms, и у меня есть пользователи по всему миру.

Ответы [ 4 ]

2 голосов
/ 17 ноября 2008

Есть 2 больших проблемы, которые ваш дизайн должен обязательно решить

  1. Конфиденциальность (на что ссылался Дон) - Вы должны быть предельно ясны, какую информацию вы собираете и отправляете на свой центральный сервер, в идеале пользователи должны иметь возможность проверять точные данные, которые вы отправляете обратно в центральный сервер. сервер (если они хотят) - для любого общедоступного программного обеспечения должен быть очень простой способ отказаться.

  2. Производительность и масштабируемость - вам необходимо оценить, сколько данных вам действительно нужно на стороне сервера, и рассмотреть все возможные приемы, которые объединяют и сжимают данные на стороне клиента (а также имеют жесткие ограничения на объем трафик, который вы будете отправлять и как часто вы будете его отправлять)

Что касается реализации на стороне клиента, я бы порекомендовал исследовать Sqlite.net или другую встроенную БД. Использование встроенной БД для хранения этой информации на клиенте даст вам большую гибкость при агрегировании и будет иметь преимущество в том, что оно транзакционное, быстрое и простое в реализации. Sqlite имеет очень щедрую лицензию на общественное достояние, поэтому с юридической точки зрения ее действительно легко использовать в общедоступных приложениях.

1 голос
/ 17 ноября 2008

Попробуйте поискать в Google. Есть несколько интересных идей Бена Либлита и соавторов, и еще одна серия идей Алекса Орсо и соавторов (отказ от ответственности - я один из соавторов Алекса Орсо), основанная на выборке информации о времени выполнения от каждого пользователя и собирать его вместе интересным способом.

http://theory.stanford.edu/~aiken/publications/papers/pldi03b.pdf

и

http://www.cs.umd.edu/class/fall2006/cmsc838p/Ramss/remoteClassJournal.pdf

- два (не обязательно лучших) примера таких работ / идей.

0 голосов
/ 17 ноября 2008

Будьте осторожны, как вы справляетесь с этим. Некоторые компании получают негативную реакцию пользователей, собирая слишком много информации или неясно, что именно было собрано. Самый безопасный способ - спросить пользователя, прежде чем включать какие-либо функции «телефон домой». Предоставление пользователю возможности видеть фактические данные перед отправкой также кажется хорошим.

Мне стало интересно, есть ли какой-нибудь способ использовать вызов развертывания одним щелчком, который происходит всякий раз, когда приложение, запускаемое одним щелчком мыши, проверяет наличие обновлений. Я еще не исследовал.

Что касается сбора фактических чисел, возможно, пользовательские настройки - самое простое место. Если вы не знакомы с ними, просто проверьте свойства проекта и перейдите на вкладку «Настройки».

0 голосов
/ 17 ноября 2008

Я бы попробовал что-то вроде этого:

    // execute this method once all forms have been created
    public static void HookButtons()
    {
         foreach( Form f in Application.OpenForms )
         {
              EnumerateControls( f.Controls );
         }
    }

    public static void EnumerateControls( ICollection controls )
    {
        foreach( Control ctrl in controls )
        {
            if( ctrl.Controls.Count > 0 )
            {
                EnumerateControls( ctrl.Controls );
            }

            if( ctrl is ButtonBase )
            {
                ctrl.MouseClick +=new MouseEventHandler( ctrl_MouseClick );
            }
        }

    }

    static void ctrl_MouseClick( object sender, MouseEventArgs e )
    {
        ButtonBase clicked = ((ButtonBase)sender);

        // do something with the click information here
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...