Time of Update: 2018-12-07
文章目錄 測試用的String資料測試相關方法具體測試代碼 在上一編 文章裡分享了自訂實現一個高效的String Split方法,接下來同樣分享一下String相關操作的函數Replace.通過反編譯查看String的Replace方法是內建實現無法查看具體
Time of Update: 2018-12-07
在Silverlight 一般是採用wcf進行資料通訊,畢竟wcf在資料結構定義上非常方便,但如果你想用Silverlight下的socket進行對象傳偷就不得不封裝處理一下,在Silverlight下有XML序列化也是非常方便的,但這樣會導致訊息比較臃腫,同樣還要對資料包分析處理包括粘包等工作.如果你要面對這些問題那以下組件也許會給你帶來很大的協助.Beetle.SL是封裝Silverlight socket tcp的一個開源組件.
Time of Update: 2018-12-07
Beetle.SL給Silverlight提供了WCF以外的基於對象傳送的Socket
Time of Update: 2018-12-07
Time of Update: 2018-12-07
前兩天打算給組件做個AMF3適配器用於組件和Flash進行通訊互動,經瞭解後發現FluorineFx在.net下對AMF3支援比較完善的一個項目,於就下載下來做一下整合.出於好奇於是看了一下相關代碼,由於只需要用到序列化問題所以只關注了一下AMFWriter;從實現代碼來看AMFWriter基本沒有考慮高並發下的GC壓力,資料寫入過程基本都是通過new byte[]複製的方式.為了進行步瞭解於是對FluorineFx序列化對象做了個記憶體分析.
Time of Update: 2018-12-07
文章目錄 自訂物件查詢關聯查詢匯總統計描述 使用Smark.Data進行資料查詢時必須通過對象來描述,其主要描述資訊包括查詢來源於那些表和需要那些資訊等,即使平常的最常面對的關聯查詢,資料匯總查詢等都可以通過實體描述來完成.因此實體描述在組件中起到一個非常重要的作用,可以說所有資料處理都必須經過實體描述.以下是簡單地介紹Smark.Data的實體描述能完成那些資料查詢工作. [Table] interface
Time of Update: 2018-12-07
1. 概論在過去的近十年的時間裡,物件導向編程大行其道。以至於在大學的教育裡,老師也只會教給我們兩種編程模型,面向過程和物件導向。孰不知,在物件導向產生之前,在物件導向思想產生之前,函數式編程已經有了數十年的曆史。那麼,接下來,就讓我們回顧這個古老又現代的編程模型,讓我們看看究竟是什麼魔力將這個概念,將這個古老的概念,在21世紀的今天再次拉入了我們的視野。2. 什麼是函數式編程在維基百科中,已經對函數式編程有了很詳細的介紹。那我們就來摘取一下Wiki上對Functional
Time of Update: 2018-12-07
其實在.net socket編寫高效能穩定方面的資料真的比較少,一個實質性的測試資料結果對比就更少了.我們可以從http://msdn.microsoft.com/zh-cn/magazine/cc163356.aspx看到MS說net 2.0
Time of Update: 2018-12-07
在之前的文章講述了使用Websocket調用遠程方式的功能,在這基礎我們可以簡單地使用WebSocket進行資料處理方面的應用;只需要在方法執行相關的資料庫操作返回即可,結合jeasyui庫所提供豐富的控制項進行資料應用處理變得非常簡單的事情.下面使用jeasyui和WebSocket實現一個查詢Northwind資料訂單的應用案例.首先分析一下以下一個訂單查詢案例所需要的邏輯功能.從以上的案例圖中可以得到包括的功能如下:1)僱員查詢2)客戶查詢3)訂單分頁查詢4)訂單明細查詢C#代碼針對以上功
Time of Update: 2018-12-07
一般在對字元進行編碼的時候都會使用Encoding.GetBytes方法來進行,但當你在使用該方法的時候有沒瞭解這個方法呢?其實Encoding.GetBytes提供了很多方法不過一般都會直接使用Encoding.GetBytes(string).那使用這個方法會有什麼問題呢?通過反編譯工具看一下這個方法的實現代碼.public virtual byte[] GetBytes(string s){if (s == null){throw new
Time of Update: 2018-12-07
在傳統的網頁實現聊天室的方法是通過每隔一段時間請求伺服器擷取相關聊天資訊來實現,然而html5帶來的websocket功能改變這了這種方式.由於websocket在串連伺服器後允許保持串連來進行資料互動,因此伺服器可以主動地向用戶端發送相應的資料.對於html5的處理只需要在串連建立完成後在websocket的receive事件中處理接收的資料即可.下面通過實現一個聊天室來體驗一下伺服器可以主動地向用戶端發的功能.功能一個簡單的聊天室主要有以下幾個功能:1)註冊註冊要處理幾個事情,分別是註冊完成
Time of Update: 2018-12-07
在傳統的HTTP應用上傳檔案想要同時上傳多個檔案並查看上傳進度是一件很麻煩的事情,當然現在也有一些基於SWF的檔案上傳組件提供這種的便利性.到了HTML5下對檔案的讀取和上傳的控制方面就非常靈活,HTML5提供一系列的AIP進行檔案讀取,包括計取檔案某一塊的內容也非常方便,結合Websocket進行檔案的傳輸就變得更加方便和靈活.下面通過使用HTML5結合websocet簡單地實現多檔案同時上傳應用.實現功能大概預覽一下需要做的功能:主要功能是使用者可以直接把檔案夾的檔案直接拖放到網頁中,並進行
Time of Update: 2018-12-07
針對現有.net 的socket tcp來說效能是非常不錯的,以現有普通伺服器的配置掛載幾W以上的長串連每秒處理幾W的請求應答從網路吞吐能力來說完全可以應付。不過實際應用並不可能這麼簡單,既然有所求就必然要處理一些邏輯上的工作。如果讓一台普通服務每秒去處理幾W的資料邏輯似乎有點不太現實現事情,所以就產生了這種架構的想法前置一台Proxy 伺服器,後面掛N台邏輯伺服器。大概網路布局如下: 從規划上使用者的所有訪問只需要針對Proxy
Time of Update: 2018-12-07
文章目錄 首先是制定一個Tcp服務Client實現 Beetle雖然提供了效能出色的二進位序列化功能,但畢竟需要使用者通過writer和reader的方法來手動描述過程;事實上計較這些效能的情境並不多,很多時候一個自動序列化功能對程式的編寫和維護都起到極其方便的作用。在設計的時候組件是通過介面的方式來描述訊息讀寫操作,因此在擴充對Protobuf支援也是比較方便的。
Time of Update: 2018-12-07
最近在制定一個網路檔案互動的協議,協議制訂上採用了HTTP協議的方式,因此需對協議資料進行一個分割處理;雖然使用String的Split方法可以達到目的,但通過反編譯查看其代碼後發現實現相對複雜,效能上也不怎樣;於是自己實現一個簡單的字元分割處理類,在實現後和String的Sqlit方法進行了一個簡單的對比,發現效能要比Sqlit高所以分享出來.測試情況分割處理的內容 Cache-Control:public,
Time of Update: 2018-12-07
在實際開發應用中,非UI線程操作UI是普遍存在的,在.net下一般是通過Control.Invoke的方法來進行操作,但到處都是Control.Invoke代碼維護可是一件麻煩的事情。以下通過介面和隊列來規範非UI線程操UI的實現。 既然要規範處理那介面是個不錯的選擇,以下定義一個簡單的執行介面public interface IInvokeItem { void Execute(); } 以下是擴充一個簡單的操作類封裝class
Time of Update: 2018-12-07
Ant是基於Beetle實現開源的自動更新工具,主要包括三大部分:網路檔案服務,檔案更新管理和用戶端更新群組件.網路檔案服務服務端主要用於檔案管理,包括檔案上傳和下載。服務在開啟的時候必鬚生成rsa認證,主要是用於管理端更新檔案時進行一個有效性驗證.檔案更新管理檔案管理端是用於管理更新的檔案,必須把服務端產生的private
Time of Update: 2018-12-07
如果你在寫一個Socket Tcp服務,想知道當前的寫的服務在資料發送和接收上是不是有著好的效能,不防可以用這個工具測試一下這個工具會向服務端建立1000個串連,根據你設定的間隔和包大小向服務發送資訊,服務只需把資料回傳即可,延時只是一個參考,因為程式本身是非同步和隊列處理也會受cpu影響導致一些網路以外的延時情況TcpSocketPerformanceTest.rar (78.33 kb)
Time of Update: 2018-12-07
Time of Update: 2018-12-07
文章目錄 首先是制定一個Tcp服務Flash端實現 之前的文章已經介紹了Beetle使用ProtoBuf.net進行對象序列化資料轉送,這一章主要講述Beetle如何使用FluorineFx和Flash進行AMF3通訊.其實現原理和使用ProtoBuf.net一樣,擴充出一個MessageAdapter即可以. MessageAdapter的實現如下:public class MessageAdapter:IMessage