2008-11-17 48 views
2

我有一个winforms应用程序,我想跟踪每次用户单击某些按钮等,以及其他行动。什么是最好的办法,我跟踪这个信息,然后把它放在一起,这样我可以运行在最常用的功能指标等Winforms应用程序的轻量级仪器

这是一个WinForms应用程序,我在世界各地的用户。

回答

2

有2个大的问题,你的设计必须是一定要解决

  1. 隐私(何唐提到) - 你得一清二楚,你正在收集什么样的信息和发送到你的中央服务器,理想情况下,用户应该能够检查你发送回中央服务器(如果他们希望)的确切数据 - 对于任何公开的软件应该有退出一个非常简单的方法。

  2. 性能和可伸缩性 - 您必须估算服务器端真正需要的数据量,并查看聚合和压缩数据客户端的各种技巧(以及对流量的限制你会被发送和多久你将要发送的话)

至于客户端实现,我会建议调查Sqlite.net或其他嵌入式数据库。使用嵌入式数据库存储在客户端上这些信息会给你很多的灵活性与聚合和将有被交易,快速,简单地实现了优势。 Sqlite具有非常慷慨的公共领域许可证,因此从法律角度来看,它非常易于在公共应用程序中使用。

0

我想尝试这样的事:

// 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 
    } 
+0

我的问题是如何收集和保留此数据,所以我可以从所有用户抓住它,然后看趋势,等等。 – leora 2008-11-17 05:40:20

1

尝试做一个谷歌学术搜索。 Ben Liblit及其合着者提出了一些有趣的想法,Alex Orso及其合作者(免责声明 - 我是Alex Orso的合着者之一)的另一系列想法是基于从每个用户处获取运行时信息的样本并以一种有趣的方式将它们组合在一起。

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

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

是两个这样的论文/想法(不一定是最好的)的例子。

0

小心你如何处理这个问题。一些公司由于收集太多信息或不清楚收集的信息而受到用户的反对。最安全的方法是在启用任何“手机之家”功能之前询问用户。允许用户在发送之前查看实际数据似乎也不错。

我想知道是否有一些方法可以搭载一次性部署调用,只要一次点击应用程序启动并检查更新就会发生。虽然我还没有调查过。

至于收集实际的数字,也许用户设置是最简单的地方。如果您不熟悉它们,只需查看项目属性并转到设置选项卡。