ОТЛИЧНЫЙ ключевое слово, которое Вы ищете.
В MSSQL, копируя уникальные строки от таблицы до другого может быть сделан как это:
SELECT DISTINCT column_name
INTO newTable
FROM srcTable
Эти column_name
столбец, от которого Вы ищете уникальные значения.
Протестированный и работы.
Я сталкиваюсь с этим атрибутом мемоизатора, используя postsharp
Я использовал следующую функцию Memoize в своем проекте:
public class Foo
{
public int Fibonacci(int n)
{
return n > 1 ? Fibonacci(n - 1) + Fibonacci(n - 2) : n;
}
}
class Program
{
public static Func<Т, TResult> Memoize<Т, TResult>(Func<Т, TResult> f) where Т : IEquatable<Т>
{
Dictionary<Т, TResult> map = new Dictionary<Т, TResult>();
return a =>
{
TResult local;
if (!TryGetValue<Т, TResult>(map, a, out local))
{
local = f(a);
map.Add(a, local);
}
return local;
};
}
private static bool TryGetValue<Т, TResult>(Dictionary<Т, TResult> map, Т key, out TResult value) where Т : IEquatable<Т>
{
EqualityComparer<Т> comparer = EqualityComparer<Т>.Default;
foreach (KeyValuePair<Т, TResult> pair in map)
{
if (comparer.Equals(pair.Key, key))
{
value = pair.Value;
return true;
}
}
value = default(TResult);
return false;
}
static void Main(string[] args)
{
var foo = new Foo();
// Transform the original function and render it with memory
var memoizedFibonacci = Memoize<int, int>(foo.Fibonacci);
// memoizedFibonacci is a transformation of the original function that can be used from now on:
// Note that only the first call will hit the original function
Console.WriteLine(memoizedFibonacci(3));
Console.WriteLine(memoizedFibonacci(3));
Console.WriteLine(memoizedFibonacci(3));
Console.WriteLine(memoizedFibonacci(3));
}
}
В моем проекте мне нужны были только функции с одним аргументом, реализующие IEquatable <Т> но это можно обобщить и дальше. Еще одно важное замечание: этот код не является потокобезопасным. Если вам нужна потокобезопасность, вам необходимо синхронизировать доступ для чтения / записи к хэш-таблице внутренней карты.
Чтобы конкретно ответить на ваши вопросы:
Если вы напишете плагин для PostSharp вместо использования его библиотеки LAOS, вы не получите снижения производительности.