Span<T>
আপনার নিজের অ্যাপ্লিকেশনটির কোড বেসে বিভ্রান্তিকর এবং / অথবা বহনযোগ্য-ফ্লাফ ফেলে না দিয়ে চূড়ান্ত প্রতিযোগিতামূলক বিকল্প সরবরাহ করে:
// byte[] is implicitly convertible to ReadOnlySpan<byte>
static bool ByteArrayCompare(ReadOnlySpan<byte> a1, ReadOnlySpan<byte> a2)
{
return a1.SequenceEqual(a2);
}
.NET কোর 3.1.0 হিসাবে বাস্তবায়নের (সাহসের) এখানে পাওয়া যাবে ।
এই পদ্ধতিটি যুক্ত করার জন্য আমি @ এলিআরবেলের গিস্টটি সংশোধন করেছি SpansEqual
, অন্যের মানদণ্ডে বেশিরভাগ কম আকর্ষণীয় অভিনেতা বাদ দিয়েছি , এটি বিভিন্ন অ্যারে মাপ, আউটপুট গ্রাফ দিয়ে চালাচ্ছি SpansEqual
এবং বেসলাইন হিসাবে চিহ্নিত করব যাতে এটি বিভিন্ন পদ্ধতির সাথে কীভাবে তুলনা করে তা জানায় SpansEqual
।
"ত্রুটি" কলামটি সরাতে হালকাভাবে সম্পাদিত নীচের সংখ্যাগুলি ফলাফলগুলি থেকে।
| Method | ByteCount | Mean | StdDev | Ratio |
|-------------- |----------- |-------------------:|------------------:|------:|
| SpansEqual | 15 | 3.562 ns | 0.0035 ns | 1.00 |
| LongPointers | 15 | 4.611 ns | 0.0028 ns | 1.29 |
| Unrolled | 15 | 18.035 ns | 0.0195 ns | 5.06 |
| PInvokeMemcmp | 15 | 11.210 ns | 0.0353 ns | 3.15 |
| | | | | |
| SpansEqual | 1026 | 20.048 ns | 0.0286 ns | 1.00 |
| LongPointers | 1026 | 63.347 ns | 0.1062 ns | 3.16 |
| Unrolled | 1026 | 39.175 ns | 0.0304 ns | 1.95 |
| PInvokeMemcmp | 1026 | 40.830 ns | 0.0350 ns | 2.04 |
| | | | | |
| SpansEqual | 1048585 | 44,070.526 ns | 35.3348 ns | 1.00 |
| LongPointers | 1048585 | 59,973.407 ns | 80.4145 ns | 1.36 |
| Unrolled | 1048585 | 55,032.945 ns | 24.4745 ns | 1.25 |
| PInvokeMemcmp | 1048585 | 55,593.719 ns | 22.4301 ns | 1.26 |
| | | | | |
| SpansEqual | 2147483591 | 253,648,180.000 ns | 1,112,524.3074 ns | 1.00 |
| LongPointers | 2147483591 | 249,412,064.286 ns | 1,079,409.5670 ns | 0.98 |
| Unrolled | 2147483591 | 246,329,091.667 ns | 852,021.7992 ns | 0.97 |
| PInvokeMemcmp | 2147483591 | 247,795,940.000 ns | 3,390,676.3644 ns | 0.98 |
SpansEqual
সর্বোচ্চ-অ্যারে-আকারের পদ্ধতিগুলির জন্য শীর্ষে না এসে দেখে আমি অবাক হয়ে গিয়েছিলাম, তবে পার্থক্যটি এতটাই সামান্য যে আমার মনে হয় না এটি কখনই গুরুত্বপূর্ণ হবে।
আমার সিস্টেম তথ্য:
BenchmarkDotNet=v0.12.0, OS=Windows 10.0.18362
Intel Core i7-6850K CPU 3.60GHz (Skylake), 1 CPU, 12 logical and 6 physical cores
.NET Core SDK=3.1.100
[Host] : .NET Core 3.1.0 (CoreCLR 4.700.19.56402, CoreFX 4.700.19.56404), X64 RyuJIT
DefaultJob : .NET Core 3.1.0 (CoreCLR 4.700.19.56402, CoreFX 4.700.19.56404), X64 RyuJIT