我目前正在开发一项 Windows 服务,该服务将处理通过 USB 连接到我的计算机的多个测量仪器的数据采集。它将向 SQL 数据库发送一些数据,但我也在为机器创建另一个应用程序,以便能够在本地实时查看数据,并且在最坏的情况下,我将处理超过 7,000,000 个元素的数组/列表情景。
目前我正在使用带有 NetNamedPipeBinding 的 WCF 进行进程间通信,它工作得很好(我可以在不到四分之一秒的时间内传输一个包含超过 700 万个双精度的数组)。所以我并不急需答案,但我很好奇是否有更快或更容易访问服务中数据的更快方法。
我一直在考虑深入研究非托管内存并让服务返回指向数组的指针或类似的东西。但是,如果收益很小,我不想为此烦恼。只是当传递一个类时(我敢打赌一个结构的开销会更少),性能坦克和我试图获得一个良好的基础,以防我开始处理更复杂的数据类型。
服务相关代码
public class testclass
{
public double dub1 {get;set;}
public double dub2 {get;set;}
}
public testclass[] GetList(int n)
{
sw.Restart();
testclass[] numbers = new testclass[n];
for (var i = 0; i < n; i++)
{
numbers[i] = new testclass { dub1 = i, dub2 = i };
}
numbers[0].dub1 = (double)sw.ElapsedMilliseconds;
return numbers;
}
public double[] GetDoubles(int n)
{
sw.Restart();
double[] numbers = new double[n];
numbers[0] = (double)sw.ElapsedMilliseconds;
return numbers;
}
客户端相关代码
class Program
{
static void Main(string[] args)
{
while (1 == 1)
{
Console.WriteLine("Size of List");
var number1 = int.Parse(Console.ReadLine());
var sw = new Stopwatch();
var test = new ServiceReference1.CalculatorClient();
sw.Restart();
var list = test.GetDoubles(number1).ToList();
Console.WriteLine("Response Time: "+ sw.ElapsedMilliseconds);
Console.WriteLine("Time to make list: "+list[0]);
}
}
}