Любые идеи о том, почему сторонний драйвер ODBC будет выполнять запрос очень медленно из службы WCF и очень быстро из обычного консольного приложения? - PullRequest
0 голосов
/ 04 мая 2011

У меня есть вызов к стороннему драйверу ODBC следующим образом:

var DbConnection = new OdbcConnection(@"DSN=QuickBooks Data;SERVER=QODBC;OptimizerDBFolder=%UserProfile%\QODBC Driver for QuickBooks\Optimizer;OptimizerAllowDirtyReads=N;SyncFromOtherTables=Y;IAppReadOnly=Y");
var tb = new DataTable();
using (var ad = new OdbcDataAdapter("SELECT * FROM Customer", DbConnection))
{
   ad.Fill(tb);
}

Отлично запускается из приложения colsole, занимает несколько секунд.

Но если я ничего не изменю, кроме как запустить его из собственной службы WCF, как это:

[ServiceContract]
public interface IQuickBooksService
{
    [OperationContract]
    DataTable GetQuickBooksData(string query);
}

public class QuickBooksService : IQuickBooksService
{
    public DataTable GetQuickBooksData(string query)
    {
        var DbConnection = new OdbcConnection(@"DSN=QuickBooks Data;SERVER=QODBC;OptimizerDBFolder=%UserProfile%\QODBC Driver for QuickBooks\Optimizer;OptimizerAllowDirtyReads=N;SyncFromOtherTables=Y;IAppReadOnly=Y");
        var tb = new DataTable();
        using (var ad = new OdbcDataAdapter("SELECT * FROM Customer", DbConnection))
        {
            ad.Fill(tb);
        }
        return tb;
    }
}

Я вижу, как водитель работает через панель состояния, которую он предоставляет, но в жалком темпе улитки.

Я немного озадачен. Любая помощь приветствуется.

Примечание: я собираюсь обойти это, если я не решу, это использовать базу данных в качестве очереди сообщений и выполнить (быстрый) опрос консольного приложения для сообщений и поместить результаты обратно в базу данных ( может быть, временная таблица, я не знаю) путем выгрузки данных в XML.

1 Ответ

0 голосов
/ 04 мая 2011

Возможно, по той причине, что вы сериализуете DataTable, который содержит много данных? Если вам нужно опросить базу данных через WCF, я бы использовал что-то более легкое, чем DataTable, и рассмотрел бы асинхронные операции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...