Limitato I / O o CPU

0

Ho un'applicazione di telefonia, c'è un servizio Windows (prodotto di terze parti) in esecuzione su un server remoto. L'applicazione viene eseguita contro il server. Per connettere il server, abbiamo il codice.

public static TelephonyServer ts;
ts = new TelephonyServer(sIpaddress, "username", "password");

TelephonyServer è molto complicato.

Dopo aver ottenuto l'istanza di TelephonyServer, ora possiamo ottenere la risorsa da essa nell'applicazione. Di ':

 m_ChannelResource = m_TelephonyServer.GetChannel();
 m_VoiceResource = m_ChannelResource.VoiceResource; // VoiceResource

Ricorda che ogni chiamata telefonica avrà il proprio VoiceResource. Poi nel codice, ho usato una discussione per fare una chiamata. Se ci sono N chiamate, avrà N thread.

Ora in ogni thread, componiamo un numero in base al metodo Dial , quindi suoniamo una stringa in base al codice PlayTTS .

public DialResult Dial(string phonenumber)
{
    int num = 1024;
    num += phonenumber.Length * 2;
    byte[] array = this.SerializePropertiesForInvocation();
    num += array.Length;
    VPacket vPacket = new VPacket(this.TelephonyLinkInfo.Guid, num, "ChannelResource.Dial.string.Invoke", 1);
    vPacket.WriteNullableString(phonenumber);
    vPacket.Serialize(array);
    vPacket.DoneWriting();
    byte[] buffer = base.TelephonyServer.ExecuteCommandHelperAsync(vPacket.Buffer, "ChannelResource::Dial()");
    vPacket = VPacket.FromByteArray(buffer, "ChannelResource.Dial.string.Reply");
    int version = vPacket.Version;
    if (version == 1)
    {
           this.DeSerializePropertiesFromReply(VPacket.FromByteArray((byte[])vPacket.Deserialize()));
        vPacket.DoneReading();
        return this.m_DialResult;
    }
    vPacket.DoneReading();
    throw new Exception("ChannelResource::Dial() Wrong Packet Version Received From Invocation.");
}

E.

public PlayTTS(string ttsString, string voice)
{
    int num = 1024;

    this.StopPlayAsync();
    if (ttsString != null && ttsString.Length > 0)
    {
        num += ttsString.Length * 2;
    }
    if (voice != null && voice.Length > 0)
    {
        num += voice.Length * 2;
    }
    byte[] array = this.SerializePropertiesForInvocation();
    num += array.Length;
    VPacket vPacket = new VPacket(this.TelephonyLinkInfo.Guid, num, "VoiceResource.PlayTTS.string.string.Invoke", 1);
    vPacket.WriteNullableString(ttsString);
    vPacket.WriteNullableString(voice);
    vPacket.Serialize(array);
    vPacket.DoneWriting();
    byte[] buffer = base.TelephonyServer.ExecuteCommandHelperAsync(vPacket.Buffer, "VoiceResource::PlayTTS()");
    vPacket = VPacket.FromByteArray(buffer, "VoiceResource.PlayTTS.string.string.Reply");
    int version = vPacket.Version;
    if (version == 1)
    {
        this.DeSerializePropertiesFromReply(VPacket.FromByteArray((byte[])vPacket.Deserialize()));
    vPacket.DoneReading();

    }
    vPacket.DoneReading();
    throw new Exception("VoiceResource::PlayTTS() Wrong Packet Version Received From Invocation.");
}

Ora devo affrontare una domanda che usa C # Task o async/await scelta nella mia applicazione. Da questo articolo, ho sentito che usare Task o async/await è dipende dal fatto che l'applicazione sia legata all'I / O o alla CPU.

Non sono del tutto sicuro che l'applicazione sia legata all'I / O, al limite della CPU o ad un qualche tipo di ibrido. Puoi darmi qualche consiglio in base alle mie informazioni?

EDIT : rimuovi l'immagine di dettaglio di TelephonyServer in base al commento. 10/10/2014 12:54 pm

    
posta Love 10.10.2014 - 17:15
fonte

1 risposta

5

Le sole porzioni di codice associate alla CPU in un programma sono quelle che contengono cicli che eseguono molti calcoli su grandi quantità di dati. Se non si sta scrivendo un gioco, un programma di grafica, un programma di elaborazione delle immagini o si eseguono complesse analisi o modellazione dei dati, è improbabile che il codice associato alla CPU sia improbabile. Qualsiasi codice che utilizza una rete o un file system per trasferire dati frequentemente è quasi sicuramente vincolato all'IO.

    
risposta data 10.10.2014 - 18:15
fonte

Leggi altre domande sui tag