我有一個winforms應用程序,我想跟蹤每次用戶單擊某些按鈕等,以及其他行動。什麼是最好的辦法,我跟蹤這個信息,然後把它放在一起,這樣我可以運行在最常用的功能指標等Winforms應用程序的輕量級儀器
這是一個WinForms應用程序,我在世界各地的用戶。
我有一個winforms應用程序,我想跟蹤每次用戶單擊某些按鈕等,以及其他行動。什麼是最好的辦法,我跟蹤這個信息,然後把它放在一起,這樣我可以運行在最常用的功能指標等Winforms應用程序的輕量級儀器
這是一個WinForms應用程序,我在世界各地的用戶。
有2個大的問題,你的設計必須是一定要解決
隱私(何唐提到) - 你得一清二楚,你正在收集什麼樣的信息和發送到你的中央服務器,理想情況下,用戶應該能夠檢查你發送回中央服務器(如果他們希望)的確切數據 - 對於任何公開的軟件應該有退出一個非常簡單的方法。
性能和可伸縮性 - 您必須估算服務器端真正需要的數據量,並查看聚合和壓縮數據客戶端的各種技巧(以及對流量的限制你會被髮送和多久你將要發送的話)
至於客戶端實現,我會建議調查Sqlite.net或其他嵌入式數據庫。使用嵌入式數據庫存儲在客戶端上這些信息會給你很多的靈活性與聚合和將有被交易,快速,簡單地實現了優勢。 Sqlite具有非常慷慨的公共領域許可證,因此從法律角度來看,它非常易於在公共應用程序中使用。
我想嘗試這樣的事:
// 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
}
嘗試做一個谷歌學術搜索。 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
是兩個這樣的論文/想法(不一定是最好的)的例子。
小心你如何處理這個問題。一些公司由於收集太多信息或不清楚收集的信息而受到用戶的反對。最安全的方法是在啓用任何「手機之家」功能之前詢問用戶。允許用戶在發送之前查看實際數據似乎也不錯。
我想知道是否有一些方法可以搭載一次性部署調用,只要一次點擊應用程序啓動並檢查更新就會發生。雖然我還沒有調查過。
至於收集實際的數字,也許用戶設置是最簡單的地方。如果您不熟悉它們,只需查看項目屬性並轉到設置選項卡。
我的問題是如何收集和保留此數據,所以我可以從所有用戶抓住它,然後看趨勢,等等。 – leora 2008-11-17 05:40:20