C#测试WCF并行性

实验并没得到预期的并发行为,不知道什么原因。

原来没有并发是因为客户端网络连接并发设置,需要把maxconnection改为大一些的数。

WCF 跟并发 性能相关的几个配置:

1、系统控制的客户端网络连接并发(如果服务端也需要并发请求的话这个参数也是需要的):

         <configuration>
               <system.net>
                       <connectionManagement>
                                  <add address="*" maxconnection="1000"/>
                         </connectionManagement>
               </system.net>
        <configuration>
 
        这个参数指定一个进程内(或domain) 并发通信连接个数限制,默认2个(就是系统控制了)

2、WCF 网络TCP/IP 监听(bingding)控制的传输协议
 
     这个参数是针对某一(些)端点的绑定的控制

             <bindings>

                <netTcpBinding>

                        <binding name="netcpbindingconfig"                 

                                      listenBacklog="100"      maxConnections="100" />

        这2个参数: 第一个就是我们常用的listen的参数,这个意义我们应该很清楚了。

                           第二个参数 msdn解释是: 客户端上可存入池中以备后续重复使用的最大连接数;服务器上可挂起调度的最大连接数。  On the client, the maximum number of connections to be pooled for subsequent reuse; on the server, the maximum number of connections allowed to be pending dispatch. (看来中文翻译的不太好)。

                          第一个是tcp协议的控制,第二个是紧跟着协议之后的调度配置(服务端)。


      3、针对服务宿主(servicehost)进行的控制

        <serviceBehaviors>

<behavior name="MathServiceBehaviours" >

<serviceThrottling

maxConcurrentCalls="100"

maxConcurrentSessions="100"

maxConcurrentInstances="100"/>

</behavior>

</serviceBehaviors>

     maxConcurrentCalls :该值指定整个 ServiceHost 中正在处理的最多消息数。

          specifies the maximum number of messages actively processing across a ServiceHost.

                 

 总结,在服务端控制流量的机制即listenBackLog -> maxConnections -> maxConcurrentCalls(..)

            基本上分三个阶段。也是针对不同的可控制对象。

            listenBackLog 针对tcp连接的缓冲设置

            maxConnections 针对接到连接后,要分配给service消费是 排队(缓冲)的设置;

            maxConcurrentCalls(sessions, instances) 是针对service处理压力的控制。


第一组测试结果 (服务行为默认)

<span style="font-size:12px">累计时长:7850ms,client:17,客户端耗时:7859.375ms,start:23:27:51.078125_23:27:58.937500,__Server:17,服务端耗时:6750ms,start:23:27:52.156250_23:27:58.906250累计时长:8827ms,client:2,客户端耗时:9000ms,start:23:27:50.921875_23:27:59.921875,__Server:2,服务端耗时:6890.625ms,start:23:27:53.031250_23:27:59.921875累计时长:14243ms,client:4,客户端耗时:14562.5ms,start:23:27:50.937500_23:28:05.500000,__Server:4,服务端耗时:6562.5ms,start:23:27:58.921875_23:28:05.484375累计时长:15241ms,client:1,客户端耗时:15656.25ms,start:23:27:50.906250_23:28:06.562500,__Server:1,服务端耗时:6640.625ms,start:23:27:59.921875_23:28:06.562500线程 '<无名称>' (0x11fc) 已退出,返回值为 0 (0x0)。累计时长:20828ms,client:19,客户端耗时:21437.5ms,start:23:27:51.093750_23:28:12.531250,__Server:19,服务端耗时:7015.625ms,start:23:28:05.515625_23:28:12.531250累计时长:21850ms,client:14,客户端耗时:22531.25ms,start:23:27:51.046875_23:28:13.578125,__Server:14,服务端耗时:7015.625ms,start:23:28:06.562500_23:28:13.578125累计时长:27229ms,client:18,客户端耗时:27984.375ms,start:23:27:51.078125_23:28:19.062500,__Server:18,服务端耗时:6500ms,start:23:28:12.531250_23:28:19.031250线程 '<无名称>' (0x12f0) 已退出,返回值为 0 (0x0)。线程 '<无名称>' (0x11ac) 已退出,返回值为 0 (0x0)。累计时长:28452ms,client:9,客户端耗时:29359.375ms,start:23:27:51.015625_23:28:20.375000,__Server:9,服务端耗时:6593.75ms,start:23:28:13.593750_23:28:20.187500累计时长:33776ms,client:3,客户端耗时:34937.5ms,start:23:27:50.937500_23:28:25.875000,__Server:3,服务端耗时:6796.875ms,start:23:28:19.062500_23:28:25.859375累计时长:35042ms,client:13,客户端耗时:36125ms,start:23:27:51.046875_23:28:27.171875,__Server:13,服务端耗时:6671.875ms,start:23:28:20.187500_23:28:26.859375线程 '<无名称>' (0x15b4) 已退出,返回值为 0 (0x0)。累计时长:40316ms,client:7,客户端耗时:41515.625ms,start:23:27:50.968750_23:28:32.484375,__Server:7,服务端耗时:6609.375ms,start:23:28:25.875000_23:28:32.484375线程 '<无名称>' (0x12c8) 已退出,返回值为 0 (0x0)。线程 '<无名称>' (0x12cc) 已退出,返回值为 0 (0x0)。累计时长:41711ms,client:16,客户端耗时:42875ms,start:23:27:51.062500_23:28:33.937500,__Server:16,服务端耗时:6656.25ms,start:23:28:27.171875_23:28:33.828125线程 '<无名称>' (0x9d8) 已退出,返回值为 0 (0x0)。累计时长:47038ms,client:12,客户端耗时:48593.75ms,start:23:27:51.031250_23:28:39.625000,__Server:12,服务端耗时:7140.625ms,start:23:28:32.484375_23:28:39.625000线程 '<无名称>' (0xf48) 已退出,返回值为 0 (0x0)。累计时长:48339ms,client:0,客户端耗时:50359.375ms,start:23:27:50.687500_23:28:41.046875,__Server:0,服务端耗时:7218.75ms,start:23:28:33.828125_23:28:41.046875累计时长:53526ms,client:10,客户端耗时:55312.5ms,start:23:27:51.015625_23:28:46.328125,__Server:10,服务端耗时:6671.875ms,start:23:28:39.640625_23:28:46.312500线程 '<无名称>' (0x110c) 已退出,返回值为 0 (0x0)。累计时长:54796ms,client:6,客户端耗时:56625ms,start:23:27:50.968750_23:28:47.593750,__Server:6,服务端耗时:6546.875ms,start:23:28:41.046875_23:28:47.593750线程 '<无名称>' (0x132c) 已退出,返回值为 0 (0x0)。累计时长:60036ms,client:11,客户端耗时:62140.625ms,start:23:27:51.031250_23:28:53.171875,__Server:11,服务端耗时:6843.75ms,start:23:28:46.328125_23:28:53.171875线程 '<无名称>' (0x1190) 已退出,返回值为 0 (0x0)。线程 '<无名称>' (0x9dc) 已退出,返回值为 0 (0x0)。累计时长:61322ms,client:15,客户端耗时:63515.625ms,start:23:27:51.062500_23:28:54.578125,__Server:15,服务端耗时:6968.75ms,start:23:28:47.593750_23:28:54.562500线程 '<无名称>' (0x1520) 已退出,返回值为 0 (0x0)。线程 '<无名称>' (0x1270) 已退出,返回值为 0 (0x0)。累计时长:66619ms,client:5,客户端耗时:69140.625ms,start:23:27:50.968750_23:29:00.109375,__Server:5,服务端耗时:6921.875ms,start:23:28:53.171875_23:29:00.093750累计时长:67821ms,client:8,客户端耗时:70328.125ms,start:23:27:51.015625_23:29:01.343750,__Server:8,服务端耗时:6765.625ms,start:23:28:54.578125_23:29:01.343750线程 '<无名称>' (0xee0) 已退出,返回值为 0 (0x0)。线程 '<无名称>' (0xb48) 已退出,返回值为 0 (0x0)。线程 '<无名称>' (0x1030) 已退出,返回值为 0 (0x0)。线程 '<无名称>' (0x1564) 已退出,返回值为 0 (0x0)。线程 '<无名称>' (0x1018) 已退出,返回值为 0 (0x0)。线程 '<无名称>' (0x948) 已退出,返回值为 0 (0x0)。线程 '<无名称>' (0x1320) 已退出,返回值为 0 (0x0)。线程 '<无名称>' (0x157c) 已退出,返回值为 0 (0x0)。</span><span style="font-size:24px"></span>
第二组

[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession,ConcurrencyMode=ConcurrencyMode.Multiple)]public class Service : IService

累计时长:9850ms,client:5,客户端耗时:9781.25ms,start:23:33:22.734375_23:33:32.515625,__Server:5,服务端耗时:6890.625ms,start:23:33:25.609375_23:33:32.500000
累计时长:13523ms,client:16,客户端耗时:13468.75ms,start:23:33:22.921875_23:33:36.390625,__Server:16,服务端耗时:11531.25ms,start:23:33:24.859375_23:33:36.390625
累计时长:15583ms,client:1,客户端耗时:16078.125ms,start:23:33:22.500000_23:33:38.578125,__Server:1,服务端耗时:13468.75ms,start:23:33:25.109375_23:33:38.578125
累计时长:19225ms,client:9,客户端耗时:19671.875ms,start:23:33:22.812500_23:33:42.484375,__Server:9,服务端耗时:13562.5ms,start:23:33:28.921875_23:33:42.484375
线程 '<无名称>' (0x9dc) 已退出,返回值为 0 (0x0)。
累计时长:20228ms,client:3,客户端耗时:20781.25ms,start:23:33:22.718750_23:33:43.500000,__Server:3,服务端耗时:7046.875ms,start:23:33:36.406250_23:33:43.453125
累计时长:26601ms,client:8,客户端耗时:27218.75ms,start:23:33:22.765625_23:33:49.984375,__Server:8,服务端耗时:6484.375ms,start:23:33:43.484375_23:33:49.968750
累计时长:28622ms,client:14,客户端耗时:29203.125ms,start:23:33:22.906250_23:33:52.109375,__Server:14,服务端耗时:14312.5ms,start:23:33:36.468750_23:33:50.781250
线程 '<无名称>' (0x1018) 已退出,返回值为 0 (0x0)。
累计时长:32485ms,client:17,客户端耗时:33046.875ms,start:23:33:22.937500_23:33:55.984375,__Server:17,服务端耗时:13421.875ms,start:23:33:42.562500_23:33:55.984375
累计时长:33684ms,client:11,客户端耗时:34312.5ms,start:23:33:22.875000_23:33:57.187500,__Server:11,服务端耗时:7156.25ms,start:23:33:49.984375_23:33:57.140625
线程 '<无名称>' (0x157c) 已退出,返回值为 0 (0x0)。
线程 '<无名称>' (0x1564) 已退出,返回值为 0 (0x0)。
线程 '<无名称>' (0x1030) 已退出,返回值为 0 (0x0)。
累计时长:40639ms,client:15,客户端耗时:41515.625ms,start:23:33:22.906250_23:34:04.421875,__Server:15,服务端耗时:7234.375ms,start:23:33:57.187500_23:34:04.421875
线程 '<无名称>' (0x1518) 已退出,返回值为 0 (0x0)。
累计时长:46620ms,client:18,客户端耗时:47828.125ms,start:23:33:22.937500_23:34:10.765625,__Server:18,服务端耗时:18484.375ms,start:23:33:52.156250_23:34:10.640625
线程 '<无名称>' (0x1270) 已退出,返回值为 0 (0x0)。
累计时长:46995ms,client:12,客户端耗时:48296.875ms,start:23:33:22.843750_23:34:11.140625,__Server:12,服务端耗时:18578.125ms,start:23:33:52.093750_23:34:10.671875
累计时长:48275ms,client:7,客户端耗时:49765.625ms,start:23:33:22.750000_23:34:12.515625,__Server:7,服务端耗时:7578.125ms,start:23:34:04.421875_23:34:12.000000
累计时长:50212ms,client:0,客户端耗时:51968.75ms,start:23:33:22.484375_23:34:14.453125,__Server:0,服务端耗时:18203.125ms,start:23:33:56.062500_23:34:14.265625
线程 '<无名称>' (0x1190) 已退出,返回值为 0 (0x0)。
线程 '<无名称>' (0x1520) 已退出,返回值为 0 (0x0)。
累计时长:55474ms,client:13,客户端耗时:56890.625ms,start:23:33:22.875000_23:34:19.765625,__Server:13,服务端耗时:7625ms,start:23:34:12.000000_23:34:19.625000
线程 '<无名称>' (0x15b4) 已退出,返回值为 0 (0x0)。
累计时长:62401ms,client:19,客户端耗时:64218.75ms,start:23:33:22.937500_23:34:27.156250,__Server:19,服务端耗时:7375ms,start:23:34:19.765625_23:34:27.140625
累计时长:63965ms,client:4,客户端耗时:66093.75ms,start:23:33:22.718750_23:34:28.812500,__Server:4,服务端耗时:18015.625ms,start:23:34:10.765625_23:34:28.781250
累计时长:64526ms,client:10,客户端耗时:66578.125ms,start:23:33:22.843750_23:34:29.421875,__Server:10,服务端耗时:18484.375ms,start:23:34:10.765625_23:34:29.250000
线程 '<无名称>' (0xb48) 已退出,返回值为 0 (0x0)。
累计时长:65572ms,client:2,客户端耗时:68046.875ms,start:23:33:22.515625_23:34:30.562500,__Server:2,服务端耗时:16218.75ms,start:23:34:14.312500_23:34:30.531250
累计时长:69010ms,client:6,客户端耗时:71281.25ms,start:23:33:22.750000_23:34:34.031250,__Server:6,服务端耗时:6843.75ms,start:23:34:27.171875_23:34:34.015625
线程 '<无名称>' (0x110c) 已退出,返回值为 0 (0x0)。
线程 '<无名称>' (0x948) 已退出,返回值为 0 (0x0)。
线程 '<无名称>' (0x12cc) 已退出,返回值为 0 (0x0)。
线程 '<无名称>' (0x1674) 已退出,返回值为 0 (0x0)。
线程 '<无名称>' (0x1320) 已退出,返回值为 0 (0x0)。
线程 '<无名称>' (0x9d8) 已退出,返回值为 0 (0x0)。
线程 '<无名称>' (0x14bc) 已退出,返回值为 0 (0x0)。
线程 '<无名称>' (0x10c4) 已退出,返回值为 0 (0x0)。
线程 '<无名称>' (0x1084) 已退出,返回值为 0 (0x0)。
线程 '<无名称>' (0x1164) 已退出,返回值为 0 (0x0)。
线程 '<无名称>' (0xee0) 已退出,返回值为 0 (0x0)。

第三组

[服务端

ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession,ConcurrencyMode=ConcurrencyMode.Multiple)]
public class Service : IService

客户端改为

static Stopwatch sw = new Stopwatch();
        static GTService.Service client = new GTService.Service();

累计时长:8105ms,client:2,客户端耗时:8234.375ms,start:23:36:46.187500_23:36:54.421875,__Server:2,服务端耗时:7625ms,start:23:36:46.703125_23:36:54.328125
累计时长:8613ms,client:1,客户端耗时:8781.25ms,start:23:36:46.171875_23:36:54.953125,__Server:1,服务端耗时:7625ms,start:23:36:47.328125_23:36:54.953125
累计时长:15373ms,client:7,客户端耗时:15562.5ms,start:23:36:46.265625_23:37:01.828125,__Server:7,服务端耗时:7421.875ms,start:23:36:54.390625_23:37:01.812500
累计时长:15952ms,client:10,客户端耗时:16031.25ms,start:23:36:46.375000_23:37:02.406250,__Server:10,服务端耗时:7203.125ms,start:23:36:54.953125_23:37:02.156250
线程 '<无名称>' (0x1064) 已退出,返回值为 0 (0x0)。
累计时长:22384ms,client:5,客户端耗时:22640.625ms,start:23:36:46.234375_23:37:08.875000,__Server:5,服务端耗时:7046.875ms,start:23:37:01.828125_23:37:08.875000
累计时长:23748ms,client:4,客户端耗时:24015.625ms,start:23:36:46.234375_23:37:10.250000,__Server:4,服务端耗时:7171.875ms,start:23:37:02.171875_23:37:09.343750
线程 '<无名称>' (0x170c) 已退出,返回值为 0 (0x0)。
线程 '<无名称>' (0x404) 已退出,返回值为 0 (0x0)。
累计时长:29579ms,client:9,客户端耗时:29812.5ms,start:23:36:46.296875_23:37:16.109375,__Server:9,服务端耗时:7109.375ms,start:23:37:08.875000_23:37:15.984375
累计时长:29918ms,client:6,客户端耗时:30203.125ms,start:23:36:46.234375_23:37:16.437500,__Server:6,服务端耗时:7093.75ms,start:23:37:09.343750_23:37:16.437500
线程 '<无名称>' (0xa7c) 已退出,返回值为 0 (0x0)。
累计时长:36300ms,client:14,客户端耗时:36359.375ms,start:23:36:46.468750_23:37:22.828125,__Server:14,服务端耗时:6843.75ms,start:23:37:15.984375_23:37:22.828125
线程 '<无名称>' (0x15c0) 已退出,返回值为 0 (0x0)。
累计时长:37073ms,client:18,客户端耗时:37109.375ms,start:23:36:46.531250_23:37:23.640625,__Server:18,服务端耗时:6796.875ms,start:23:37:16.437500_23:37:23.234375
累计时长:43140ms,client:12,客户端耗时:43406.25ms,start:23:36:46.375000_23:37:29.781250,__Server:12,服务端耗时:6953.125ms,start:23:37:22.828125_23:37:29.781250
累计时长:43584ms,client:19,客户端耗时:43687.5ms,start:23:36:46.546875_23:37:30.234375,__Server:19,服务端耗时:6984.375ms,start:23:37:23.234375_23:37:30.218750
线程 '<无名称>' (0x113c) 已退出,返回值为 0 (0x0)。
线程 '<无名称>' (0x908) 已退出,返回值为 0 (0x0)。
累计时长:49815ms,client:17,客户端耗时:49937.5ms,start:23:36:46.531250_23:37:36.468750,__Server:17,服务端耗时:6500ms,start:23:37:29.781250_23:37:36.281250
累计时长:50182ms,client:8,客户端耗时:50546.875ms,start:23:36:46.296875_23:37:36.843750,__Server:8,服务端耗时:6531.25ms,start:23:37:30.234375_23:37:36.765625
线程 '<无名称>' (0x1360) 已退出,返回值为 0 (0x0)。
线程 '<无名称>' (0x11f8) 已退出,返回值为 0 (0x0)。
累计时长:56274ms,client:16,客户端耗时:56437.5ms,start:23:36:46.515625_23:37:42.953125,__Server:16,服务端耗时:6484.375ms,start:23:37:36.468750_23:37:42.953125
累计时长:56635ms,client:0,客户端耗时:57140.625ms,start:23:36:46.171875_23:37:43.312500,__Server:0,服务端耗时:6546.875ms,start:23:37:36.765625_23:37:43.312500
线程 '<无名称>' (0x16d8) 已退出,返回值为 0 (0x0)。
线程 '<无名称>' (0x17a4) 已退出,返回值为 0 (0x0)。
累计时长:62871ms,client:3,客户端耗时:63421.875ms,start:23:36:46.187500_23:37:49.609375,__Server:3,服务端耗时:6656.25ms,start:23:37:42.953125_23:37:49.609375
线程 '<无名称>' (0x1450) 已退出,返回值为 0 (0x0)。
累计时长:63268ms,client:13,客户端耗时:63562.5ms,start:23:36:46.453125_23:37:50.015625,__Server:13,服务端耗时:6671.875ms,start:23:37:43.312500_23:37:49.984375
线程 '<无名称>' (0x115c) 已退出,返回值为 0 (0x0)。
累计时长:69328ms,client:15,客户端耗时:69578.125ms,start:23:36:46.500000_23:37:56.078125,__Server:15,服务端耗时:6453.125ms,start:23:37:49.609375_23:37:56.062500
累计时长:69749ms,client:11,客户端耗时:70171.875ms,start:23:36:46.375000_23:37:56.546875,__Server:11,服务端耗时:6562.5ms,start:23:37:49.984375_23:37:56.546875
线程 '<无名称>' (0x177c) 已退出,返回值为 0 (0x0)。
线程 '<无名称>' (0x172c) 已退出,返回值为 0 (0x0)。
线程 '<无名称>' (0x1654) 已退出,返回值为 0 (0x0)。
线程 '<无名称>' (0x1500) 已退出,返回值为 0 (0x0)。
线程 '<无名称>' (0xce0) 已退出,返回值为 0 (0x0)。
线程 '<无名称>' (0x15a8) 已退出,返回值为 0 (0x0)。


服务端代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IService”。
[ServiceContract]
public interface IService
{

	[OperationContract]
	string GetData(int value);

	[OperationContract]
	CompositeType GetDataUsingDataContract(CompositeType composite);

	// TODO: 在此添加您的服务操作
}

// 使用下面示例中说明的数据约定将复合类型添加到服务操作。
[DataContract]
public class CompositeType
{
	bool boolValue = true;
	string stringValue = "Hello ";

	[DataMember]
	public bool BoolValue
	{
		get { return boolValue; }
		set { boolValue = value; }
	}

	[DataMember]
	public string StringValue
	{
		get { return stringValue; }
		set { stringValue = value; }
	}
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using System.Diagnostics;
using System.Threading;
using System.IO;
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、服务和配置文件中的类名“Service”。
public class Service : IService
{
	public string GetData(int value)
	{
        DateTime startTime = DateTime.Now;
        Int64 n = 30000000;
        while (n > 0)
        {
            Math.Pow(33333333333333333.33333, 23333333);
            n--;
        }
        DateTime endTime = DateTime.Now;
        string msg = string.Format("服务端耗时:{2}ms,start:{0}_{1}", startTime.ToString("HH:mm:ss.ffffff"), endTime.ToString("HH:mm:ss.ffffff"),
            (endTime - startTime).TotalMilliseconds);
        Console.WriteLine(msg);
		return string.Format("Server:{0},{1}", value,msg);
	}

	public CompositeType GetDataUsingDataContract(CompositeType composite)
	{
		if (composite == null)
		{
			throw new ArgumentNullException("composite");
		}
		if (composite.BoolValue)
		{
			composite.StringValue += "Suffix";
		}
		return composite;
	}
}
客户端代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Threading;
namespace ConsoleApplication1
{
    
    class Program
    {
        static Stopwatch sw = new Stopwatch();
        static GTService.Service client = new GTService.Service();
        class AAA
        {
            public int Value = -1;
            public AAA(int value)
            {
                Value = value;
            }
        }
        static void Main(string[] args)
        {
            sw.Start();
            ThreadPool.SetMinThreads(25, 25);
            for (int i = 0; i < 20; i++)
            {
                AAA a = new AAA(i);
                System.Threading.ThreadPool.QueueUserWorkItem(DoWork,a);
            }
            Console.ReadKey();
        }
        static void DoWork(Object valuei)
        {
            AAA a = valuei as AAA;
            int value = a.Value;
            DateTime startTime = DateTime.Now;
           
            string serverMsg=client.GetData(value, true);
            DateTime endTime = DateTime.Now;
            string clientMsg = string.Format("客户端耗时:{2}ms,start:{0}_{1},", 
                startTime.ToString("HH:mm:ss.ffffff"), endTime.ToString("HH:mm:ss.ffffff"),
                (endTime - startTime).TotalMilliseconds);
            string msg = string.Format("累计时长:{3}ms,client:{0},{1}__{2}", 
                value, clientMsg, serverMsg,sw.ElapsedMilliseconds);
            Console.WriteLine(msg);
            Debug.WriteLine(msg);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值