2011-08-26 29 views
1

說,我有一個類,如:序列化編譯代表

public class Test 
{ 
    public Func<string, bool> DoSomething { get; set; } 
} 

我有一個動態解析字符串並編譯委託一些其他的代碼。

要設置階段,我有另一個服務器上的另一個應用程序需要執行此代碼,所以我想序列化它並通過電線發送執行。我可以發送包含我需要的信息的字符串來重新創建委託,但創建委託看起來像是一個昂貴的操作,看到我將不得不一次又一次地執行該操作。無論如何要序列化該委託?

+0

如果您序列化委託然後再一次發送它,它將不得不被創建多次。 – svick

+0

這不比從頭編譯委託要快嗎? – Matt

+0

很難說,這取決於從頭開始創建代表的意思,但我懷疑會有什麼重大差異。 – svick

回答

0

如果您擔心分析相同的字符串並一遍又一遍地編譯結果,那麼您應該使用緩存。

只需在服務器上使用諸如Dictionary<string, YourDelegate>之類的內容即可實現緩存。當您收到一個字符串時,請在緩存中檢查它,如果它不存在,請創建該委託。

如果字符串太長(這意味着調用GetHashCode(),這是由Dictionary使用,它的時間太長),你可以指定某些ID或名稱代表:

客戶端創建的字符串和一個唯一的ID(可能是Guid)。它向服務器發送一條消息,聲明:「這是一個使用此ID進行委託的規範」。然後再說一句:「用這個id使用委託」。然後可以重複調用第二條消息。