当我在 Visual Studio (C#) 中生成新类时,我希望将默认访问修饰符从“内部”更改为“公共”。例如:
public class Animal
{
}
Run Code Online (Sandbox Code Playgroud)
代替:
internal class Animal
{
}
Run Code Online (Sandbox Code Playgroud)
Visual Studio (2022) 中是否有可以设置新类的默认访问修饰符的设置?
当我尝试在C#项目上启用Mulitlingual app工具包时,我收到如下错误,没有更多的事情发生:
项目"项目名称"未启用 - 无法确定项目的源文化.
怎么了?
我正在尝试为我的一个项目设置一个 github 操作脚本。该项目目前是私有的,因为我希望它在第一次发布之前处于 RC 状态。由于它已接近准备就绪,我打算现在设置一个自动构建,但我看到了一些奇怪的行为。该项目是一个简单的 C# 库,因此 .yml 文件非常简单:
name: .NET Core Desktop
on: [push, pull_request]
jobs:
build:
strategy:
matrix:
configuration: [Debug, Release]
runs-on: windows-latest
env:
Solution_Name: Replacement.sln # Replace with your solution name, i.e. MyWpfApp.sln.
Test_Project_Path: UnitTest.csproj # Replace with the path to your test project, i.e. MyWpfApp.Tests\MyWpfApp.Tests.csproj.
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
# Run build
- name: Run build
run: ./build.cmd --target pack --configuration ${{ matrix.configuration }}
Run Code Online (Sandbox Code Playgroud)
有时,其中一个构建(调试或发布,或两者)都会失败,并出现以下条目
Terminate batch job (Y/N)?
Error: The …
Run Code Online (Sandbox Code Playgroud) 生成以下代码CS9056
(“类型和别名不能命名为‘文件’”):
public sealed class file
{
}
Run Code Online (Sandbox Code Playgroud)
在我将 VS 升级到 2022 年预览版 17.4.0 后,会发生这种情况。之前的代码编译得很好。我找不到任何信息表明 thatfile
现在是 C# 中的关键字。我尝试翻译的解决方案使用 5.0SDK 进行构建,但目标是 .NET Framework 4.8。
我确实知道类型通常应使用大写名称,并且我可以通过更改为 来解决该问题class file
,class @file
但这是在自动生成的文件中,我无法更改生成器。应用一些sed
技巧似乎是一种技巧。
为什么file
这里被视为关键字以及它的用途是什么?我可以禁用它吗?
浏览一些论坛我遇到了这个答案,其中回答者将以下内容称为本机调用堆栈
00000000`0014ea10 00000642`7f67d4a2 0x642`80150142
00000000`0014ea90 00000642`7f5108f5 mscorwks!CallDescrWorker+0x82
00000000`0014eae0 00000642`7f522ff6 mscorwks!CallDescrWorkerWithHandler+0xe5
00000000`0014eb80 00000642`7f49a94b mscorwks!MethodDesc::CallDescr+0x306
00000000`0014edb0 00000642`7f474ae4 mscorwks!ClassLoader::RunMain+0x23f
00000000`0014f010 00000642`7f5efb1a mscorwks!Assembly::ExecuteMainMethod+0xbc
00000000`0014f300 00000642`7f467d97 mscorwks!SystemDomain::ExecuteMainMethod+0x492
00000000`0014f8d0 00000642`7f482c24 mscorwks!ExecuteEXE+0x47
Run Code Online (Sandbox Code Playgroud)
究竟什么是关于CLR的本机调用堆栈(这里我们正在看CLR调用我认为的Main方法)以及如何查看并了解我本地计算机上的本机调用堆栈用于教育目的?
在寻找对有符号和无符号整数算术进行溢出检查的函数时,我遇到了这个答案,它提供了很好的编译器内在函数,可以在 GCC 中进行检查数学。由于我当前编写的代码需要跨平台,因此我也需要 MSVC(Microsoft Visual Studio)编译器类似的东西。
是否存在或者我必须手动实现它?
我有一个非常复杂的数学算法,它已经在我的代码中存在多年了。今天,我做了一些高级性能测试,发现该算法占用了大量 CPU 时间。然后我看到(由于其年龄)该算法使用了double[] array = new double[6]
几次,然后将数组传递给子函数。我认为使用Span<double>
和stackalloc double
应该会稍微提高性能,因为它减少了 GC 负载并可能减少了一些范围检查。
令我非常惊讶的是,事实恰恰相反,这一变化导致整体测试时间从 23 秒提高到 28 秒。我编写了以下测试用例来展示该行为(实际代码要复杂得多):
// This one must be quite big to see the timing difference for these simple test cases
private const int MeasuremenLoopCount = 1000000;
private const int ArraySize = 10;
[Fact]
public void UseArray()
{
for (int i = 0; i < MeasuremenLoopCount; i++)
{
double[] array = new double[ArraySize];
array[0] = 2;
CalcOnArray(array);
}
}
private void CalcOnArray(double[] …
Run Code Online (Sandbox Code Playgroud) 这里是:
static uint8_t* Compress(const uint8_t* input, uint32_t inputSize, uint32_t* outputSize, int compressionLevel);
我试过了 :
[DllImport("Mini7z.dll")]
public static extern byte[] Compress(byte[] input, uint inputSize, out uint outputSize, int compressionLevel);
Run Code Online (Sandbox Code Playgroud)
和这个
[DllImport("Mini7z.dll")]
public static extern byte[] Compress(byte[] input, uint inputSize, uint* outputSize, int compressionLevel);
Run Code Online (Sandbox Code Playgroud)
但似乎没有任何作用
我的代码将10个“作业”放入队列,显示其线程ID,并立即开始并行运行。我知道作业是并行运行的,因为每个作业只是20秒的延迟,所有10个作业都在20秒内完成。让我感到困惑的是,有多个重复的ThreadID,并且据推测每个线程应该具有我所阅读的唯一ID。这怎么可能?是否存在重复项,因为重复项可能位于不同的处理器内核上(如果这样的话,那将不是很大,因为最终我希望能够使用其线程ID取消任务)?
这是在我的控制台窗口中显示的线程ID的列表”
线程ID:10线程ID:11线程ID:11线程ID:12线程ID:13线程ID:14线程ID:15线程ID:16线程ID:6线程ID:6
我尽可能地简化了代码,并定时完成了程序花了多长时间。
这是一个控制台应用程序
class Program
{
private static Object lockObj = new Object();
static void Main(string[] args)
{
var q = new TPLDataflowMultipleHandlers();
var numbers = Enumerable.Range(1, 10);
Console.Clear();
foreach (var num in numbers)
{
q.Enqueue(num.ToString());
}
Console.ReadLine();
}
} // end of program class
public class TPLDataflowMultipleHandlers
{
private static Object lockObj = new Object();
private ActionBlock<string> _jobs;
public TPLDataflowMultipleHandlers()
{
var executionDataflowBlockOptions = new ExecutionDataflowBlockOptions()
{
MaxDegreeOfParallelism = 16,
};
_jobs = new ActionBlock<string>(async (job) => …
Run Code Online (Sandbox Code Playgroud) c# ×6
.net ×2
c++ ×2
build ×1
clr ×1
file ×1
keyword ×1
multilingual ×1
optimization ×1
performance ×1
pinvoke ×1
visual-c++ ×1