嗨我有一個網絡服務,它正在進行巨大的計算並且花費了一分多鐘。長時間運行時泵信息+ C#
我已經生成了Web服務的代理文件,然後從我的客戶端使用dll(當然,我生成了代理dll)。
我的客戶端代碼
TimeSeries3D t = new TimeSeries3D();
int portfolioId = 4387919;
string[] str = new string[2];
str[0] = "MKT_CAP";
DateRange dr = new DateRange();
dr.mStartDate = DateTime.Today;
dr.mEndDate = DateTime.Today;
Service1 sc = new Service1();
t = sc.GetAttributesForPortfolio(portfolioId, true, str, dr);
但由於它正在採取的很多時間服務器來計算,1分鐘後,我收到了一條錯誤消息
的CLR已經無法從COM上下文0x33caf30轉換到COM上下文0x33cb0a0 60秒。擁有目的地上下文/公寓的線程很可能要麼進行非抽水等待,要麼處理非常長的運行操作而不抽取Windows消息。這種情況通常會對性能產生負面影響,甚至可能導致應用程序無法響應或內存使用量不斷累積。爲了避免這個問題,所有的單線程單元(STA)線程都應該使用抽取等待原語(比如CoWaitForMultipleHandles),並在長時間運行的操作中定期抽取消息。
請指導我該怎麼做?
感謝
但是我沒有對服務的任何控制權。我只獲得了我轉換爲.cs文件然後轉換爲.dll的WSDL文件。 – Newbie 2010-04-21 09:14:13
他的意思是從另一個線程調用Web服務,而不是調用Web服務的應用程序中的UI線程。 – Sekhat 2010-04-21 09:45:02
is this private void Form1_Load(object sender,EventArgs e){new Thread(new ThreadStart(GetTimeSeries3D))。Start(); }私人無效GetTimeSeries3D(){/ /代碼}? – Newbie 2010-04-21 10:56:31