Хорошо ли работает связь через сокеты в CLR Integration.
Например: у меня есть PROC, созданный в CLR Integration. Он получает все данные из таблицы и просто хочет отправить данные на TCP-сервер.
Команда:
CREATE ASSEMBLY TcpClr FROM 'G:\TcpClrTest.dll' WITH PERMISSION_SET = EXTERNAL_ACCESS
GO
CREATE PROCEDURE SendDataToSrv
(
@NAME nvarchar(20)
)
AS EXTERNAL NAME
TcpClr.[TcpClrTest.TcpSend].SqlProce;
GO
EXEC SendDataToSrv 'cdc.dbo_Test_CT'
Некоторый код в TcpClrTest.dll:
using (SqlCommand cmd = new SqlCommand("SELECT * FROM tableName", con))
{
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
//string value = reader[0].ToString();
//tcpClient.Write(value);
// ......get all data and send to tcp server.
}
}
}
У меня есть процедура с командой EXEC SendDataToSrv 'cdc.dbo_Test_CT'
, таблица имеет 100000 строк и 18 столбцов. Это будет стоить около 5 минут. Также я копирую тот же код в общую функцию, а не интеграцию с CLR, это стоит всего около 30 секунд. TCP-сервер и SQL Сервер работает на той же машине. Если я удалю код tcpClient.Write(value)
, просто получу данные из таблицы, это произойдет быстро.
В CLR Integration все, что я должен сделать, чтобы улучшить
update
,delete
,insert
., я должен получить сообщение об изменении и перезагрузить измененные данные в память. Итак Я выбираю CDC, чтобы получить сообщение DML, и интеграцию CLR, чтобы просмотреть таблицу CDC и отправить данные на сервер. Есть ли более лучший метод? - person zhengkang   schedule 02.02.2015SELECT * FROM tableName
. - person Aron   schedule 02.02.2015Memory Database
. - person zhengkang   schedule 02.02.2015