5

我正在使用一次最多接受 25KB 数据的第三方组件。我正在将对象数组从我的应用程序传递给这个第三方组件。

然而,我的应用程序写入的数据量远远超过 25KB。我正在从数据库中检索数据并直接调用组件。

我在应用程序中添加了组件的引用。我作为包含原始和非原始类型的对象数组传递给组件的数据。

如何在此处实施数据限制?

4

3 回答 3

5

您可以计算数据库中一行的大小。之后,每次传递某些东西时,都会将该大小添加到变量中。同时,您正在使用运行的秒表。只需检查是否Stopwatch.EllapsedSeconds大于 1 秒。如果是,请重置秒表并使用您已经通过的大小重置您的变量。如果不检查您已经传递的大小(变量的数量)是否大于 25KB。如果那是真的电话System.Thread.Thread.Sleep(Math.Max(1000 - StopWatch.EllapsedMilliseconds, 0))。但请记住,您必须在额外的线程中执行此操作,因为 sleep 会阻塞整个线程。

于 2012-08-27T09:25:13.853 回答
3

您必须在应用程序和组件之间实现数据缓冲区。最好的方法是:

  • 创建一个有自己的内部线程的类,
  • 在类接口的公共部分实现 Write 方法,该方法接受字节数组并将其存储到队列中
  • 内部线程从队列中写入最多 25kb 的数据块并休眠 1 秒,减去写入块所需的时间。

您还必须注意,如果数据流是连续的并且以 > 25kbps 的速率生成,那么您生成的数据会超过组件可以消耗的数据,并且您的队列将溢出。

于 2012-08-27T09:29:42.580 回答
2

查看 MSDN 中的BufferedStream类示例。您应该能够对其进行调整,以便每秒最多写入 25KB。

写入流时,您指定要读取/写入的数据大小,因此如果您说写入 25KB 并返回 24KB,您知道您仍然可以写入 1K。

如果它返回 25KB 并且缓冲区中仍有未完成的数据,您可以执行 aThread.Sleep(1000)以确保它不超过配额。

于 2012-08-27T09:40:00.070 回答