0

Entity Framework Code First を使用しています。

ここにモデルがあります:

public class Stop
{
    [Key]
    public int StopID { get; set; }
    public string StopCode { get; set; }
    public string StopText { get; set; }
    public string Street { get; set; }
}
  1. キーを int ではなくメモリ消費量を少なくすることは可能ですか? バイト?int16?

  2. 文字列のメモリ消費量を減らすことは可能ですか? 文字列[20] ?

私が抱えている問題は、WCF サービスを使用してデータを転送し、妥当なサイズを超えていることです。

ありがとう


アップデート

以下は、転送された典型的なデータのスクリーンショットです。

ここに画像の説明を入力

1 つ確かなことは、上記のスクリーンショットのように 2116 個のアイテムが転送されたことです。転送されるデータのサイズを計算してみましょう。各アイテムの文字数は 20 未満です。2116 個のアイテムがあるので、20 * 2116 = 42320 >> web.config (maxBufferPoolSize) で構成された 600000 よりもはるかに少ないです!

これが私の設定です:

      <binding name="WSHttpBinding_IRequestService" closeTimeout="00:01:00"
      openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
      bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
      maxBufferPoolSize="600000" maxReceivedMessageSize="600000" messageEncoding="Text"
      textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
      <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
      <reliableSession ordered="true" inactivityTimeout="00:10:00"
        enabled="false" />
      <security mode="Message">
        <transport clientCredentialType="Windows" proxyCredentialType="None"
          realm="" />
        <message clientCredentialType="Windows" negotiateServiceCredential="true"
          algorithmSuite="Default" />
      </security>
    </binding>

何か案が?

4

1 に答える 1

0

別のデータ型を使用しても役に立ちません。

データは転送時にテキストとしてシリアル化されるため、"42"クラスの整数である文字列は、クラス"42"のバイトである文字列とまったく同じ長さになります。送信されるのは変数の実際の値のみであるため、文字列に最大 2 GB を含めることができるという事実は、文字列を送信するたびに 2 GB が送信されるという意味ではありません。

したがって、データが非常に大きくなっている原因を正確に調べる必要があります。たとえば、あなたが思っているよりも多くのオブジェクトを転送していますか?

于 2012-05-05T11:18:38.510 に答える