私は、複数のクライアントにサービスを提供するコールごとのWCFサービスを持っています。私はいくつかのバックグラウンドプロセスを実行してサービスのスピードアップを図り、サービスの主な機能をブロックしたり遅くしたりしないようにしています。実行時間を短縮するためにバックグラウンドスレッドを実行するWCFサービス
主な機能はデータセットを返す必要があり、バックグラウンドスレッドはパラメータに基づいていくつかの統計情報を記録する必要があるということです。
コード:
Public Function GetAccountDetails(id As Integer) As AccountDetails
Dim retVal As New AccountDetails
Dim a As New Accounts
retVal = a.GetAccountDetails(id)
Dim t As New Thread(New ThreadStart(Sub()
Dim s As New Statistic
s.StatisticType = StatisticType.GetAccount
s.Parameter = id.ToString
s.Record()
End Sub))
t.Start()
Return retVal
End Function
私はそれがクライアントにデータを返すからメインスレッドをブロックしません統計を記録するには、このバックグラウンドスレッドを使用している場合。
テストシナリオではうまくいきましたが、クライアントにデータを返す前にこのスレッドを実行せずにこのスレッドを実行するという危険性はありますか? 統計データが失われる可能性はありますか? サーバー側に潜在的なメモリの問題がありますか?
ありがとうございました。
私は完全に理解していません**なぜ**あなたがこれをしたいのですか...コールごとのシナリオでは、各受信要求はサービスクラスの別々のインスタンスを取得します。やっている。サービスクラス内でバックグラウンドスレッドを使用することにより、複雑さを増やすことには何のメリットもありません。 –
クライアントは統計情報を直接記録することはできません。そのための露出サービスはありません。サービスは統計情報を記録しなければなりません。これはデータのクライアントへの戻り速度を速める方法です。バックグラウンドスレッドはクライアントが知る必要のない作業を行います。 – alundy