지도에서 SQL Server에 액세스하는 것을 항상 피할 것입니다. 실수로지도 디자인에서 실수로 인해 또는 예상치 못한 볼륨 또는지도에서의 사용으로 인해 실수로 더 많은 전화를 걸기 쉽습니다. 특정 포트 또는 포트 세트). 사실, 나는 일반적으로 다른 시스템이나 서비스에 액세스해야하는 맵에서 어떤 종류의 호출도하지 않을 것이지만 반드시해야한다면 캐싱이 도움이 될 수 있습니다.
예를 들어 MemoryCache
을 사용하여 캐시 할 수 있습니다. 내가 그와 함께 사용하는 패턴은 일반적으로 먼저 값에 대한 캐시를 확인 사용자 정의 C#을 라이브러리를 포함하고, 당신이 paritcular 항목 또는 전체 캐시, 예를 위해 하나 (SQL을 확인 미스가 있다면 :
object _syncRoot = new object();
...
public string CheckCache(string key)
{
string check = MemoryCache.Default.Get(key) as string;
if (check == null)
{
lock (_syncRoot)
{
// make sure someone else didn't get here before we acquired the lock, avoid duplicate work
check = MemoryCache.Default.Get(key) as string;
if (check != null) return check;
string sql = @"SELECT ...";
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddWithValue(...);
// ExecuteScalar or ExecuteReader as appropriate, read values out, store in cache
// use MemoryCache.Default.Add with sensible expiration to cache your data
}
}
}
}
else
{
return check;
}
}
은 염두에 두어야 할 몇 가지 :
이
- 이
AppDomain
으로 당에서 작동하고, 파이프 라인 및 오케스트레이션 별도의 응용 프로그램 도메인에서 실행하면 두 곳 모두에서이지도를 실행하는 경우, 당신은 캐시 될 겁니다. 두 곳에서 AppDomains를 공유하려고 할 때 추가 된 복잡성은 아마도 그만한 가치는 없겠지만 실제로 필요하다면 캐싱을 분리해야합니다. WCF NetTcp 서비스와 같은 것입니다.
- 더 많은 메모리를 사용합니다. BizTalk의 모든 캐시에 모든 것을 던져서는 안되며, 캐시 할 경우 컴퓨터에 사용 가능한 메모리가 많고 BizTalk가 그것을 사용할 수 있어야합니다.
MemoryCache
에는 원하는 문자열을 저장할 수 있습니다. 여기서 문자열을 사용하지만 다른 기본 유형이나 객체 일 수도 있습니다.