我正在使用一次最多接受 25KB 数据的第三方组件。我正在将对象数组从我的应用程序传递给这个第三方组件。
然而,我的应用程序写入的数据量远远超过 25KB。我正在从数据库中检索数据并直接调用组件。
我在应用程序中添加了组件的引用。我作为包含原始和非原始类型的对象数组传递给组件的数据。
如何在此处实施数据限制?
我正在使用一次最多接受 25KB 数据的第三方组件。我正在将对象数组从我的应用程序传递给这个第三方组件。
然而,我的应用程序写入的数据量远远超过 25KB。我正在从数据库中检索数据并直接调用组件。
我在应用程序中添加了组件的引用。我作为包含原始和非原始类型的对象数组传递给组件的数据。
如何在此处实施数据限制?
您可以计算数据库中一行的大小。之后,每次传递某些东西时,都会将该大小添加到变量中。同时,您正在使用运行的秒表。只需检查是否Stopwatch.EllapsedSeconds
大于 1 秒。如果是,请重置秒表并使用您已经通过的大小重置您的变量。如果不检查您已经传递的大小(变量的数量)是否大于 25KB。如果那是真的电话System.Thread.Thread.Sleep(Math.Max(1000 - StopWatch.EllapsedMilliseconds, 0))
。但请记住,您必须在额外的线程中执行此操作,因为 sleep 会阻塞整个线程。
您必须在应用程序和组件之间实现数据缓冲区。最好的方法是:
您还必须注意,如果数据流是连续的并且以 > 25kbps 的速率生成,那么您生成的数据会超过组件可以消耗的数据,并且您的队列将溢出。
查看 MSDN 中的BufferedStream类示例。您应该能够对其进行调整,以便每秒最多写入 25KB。
写入流时,您指定要读取/写入的数据大小,因此如果您说写入 25KB 并返回 24KB,您知道您仍然可以写入 1K。
如果它返回 25KB 并且缓冲区中仍有未完成的数据,您可以执行 aThread.Sleep(1000)
以确保它不超过配额。