0

潜在的な問題を引き起こす可能性があるため、人々が DB 内のアイテムを常に同期/更新するのを止めたいと思います。DBに保存されている最後の同期/更新が発生したことがあります。私がする必要があるのは、最後の更新/同期から 15 分が経過するまで、ユーザーが別の更新/同期を開始できないようにすることです。

どうすればこれを行うことができますか?

更新: 何らかの理由で、DateTime lastUpdate で「新しい式には型の後に ()、[]、または {} が必要です」というエラーが表示されます。なぜこれが考えられるのでしょうか?

 DataDataContext dc = new DataDataContext();

        DateTime lastUpdate = from t in dc.Settings
                              where t.id == 1
                              select t.lastSync;


        if ((DateTime.Now - lastUpdate).TotalMinutes >= 15)
        {

        }
        else { }

更新:並べ替え、()を見逃しました。データコンテキストの!! 顔やし

最終更新: すべて修正され、機能しています! これが「生臭い」または「悪い」と思う人のために、あなたのすべての助けに感謝します。

DateTime lastUpdate = (from t in dc.Settings
                               where t.id == 1
                               select t.lastSync).Single();


        if ((DateTime.Now - lastUpdate).TotalMinutes >= 15)
        {
            syncbuttons.Visible = false;
        }
        else { syncbuttons.Visible = true; }

今、私がやろうとしていることについて何がそんなに疑わしいのか説明してください? ユーザーがデータベースをハミングするのを止めますか? 更新/同期しようとしているユーザーが 30 人いる場合はどうなりますか。それは良いことではないでしょう!

4

3 に答える 3

1
if (lastUpdateTime.AddMinutes(15)<DateTime.Now)
{
    // do update
}
于 2012-07-12T15:17:01.890 に答える
1

エラーの原因となる問題は、linq 式が (IQuerryable) コレクションを返しますが、それを DateTime に割り当て/キャストしようとしていることです。

使ってみて

        DateTime lastUpdate = (from t in dc.Settings
                     where t.id == 1
                     select t.lastSync).Single();

データベース同期について; 私は DB の専門家ではありませんが、30 の接続を負荷が高いと見なす必要はないと思います。そうであれば、データベースとトランザクションを最適化する方がはるかに優れています。

同期ボタンを無効にしても、ユーザーがリロード ボタンを押すのを止めることはできません。その結果、カスタマイズされた更新手順よりも多くのトラフィックが生成される可能性があります。

そして、それを修正したとしても、ユーザーベースが増加して、人々が同期ボタンを叩かなくても 1 秒あたり 30 接続を取得できるようになったらどうなるでしょうか。

したがって、同期の影響を最小限に抑えることができるかどうかを確認することをお勧めします。1 つの方法として、取得するレコードにタイムスタンプを付けることが考えられます。その列にインデックスを付けて、ルックアップが高速になるようにし、ユーザーの前回の同期よりも新しい行があるかどうかをデータベースにチェックさせます。

アプリケーションが応答しなくなったり、(ユーザーから見て) 遅くなったりするだけでは、実行可能な解決策とは見なされません。

少なくともそれが私が問題に取り組む方法です。

于 2012-07-12T16:07:31.710 に答える
0
DateTime lastUpdate = ...;  // Retrieve from DB
TimeSpan elapsed = DateTime.Now - lastUpdate;
if (elapsed.TotalMinutes >= 15)
{
}

または、1 行で:

if ((DateTime.Now - lastUpdate).TotalMinutes >= 15)
于 2012-07-12T15:19:05.870 に答える