从我看到的,C#中的每个字符串都被编译成unicode。
aUnableToParseL: // DATA XREF: test.main__Main+38o
unicode <Unable to parse local IPv4s.>,0
我想知道,有没有办法告诉编译器将所有字符串编译成ASCII格式? (每个字符1个字节)
答案 0 :(得分:1)
正如其他人提到的,您可以将ASCII保存在文本文件中,甚至可以将其作为资源添加到项目中,以便将其包含在可执行文件中。您甚至可以更疯狂地压缩ASCII并将其添加为资源。
这可以减少内存消耗,但它也会增加 CPU使用率并使执行速度慢一些。可能程序中几乎所有方法都接受.NET UTF-16 System.String
,因此必须将ASCII编码为使用CPU的System.String
。
这是优化中的常规(但并非总是)权衡 - 更快,更大或更小,更慢。
有办法避免编码。例如,使用接受ANSI字符串What is the difference between the `A` and `W` functions in the Win32 API?
的winapi如果您更改Console.OutputEncoding
Print ASCII line art characters in C# console application
答案 1 :(得分:0)
您可以将字符串存储为字节数组,然后根据需要将它们转换为char
数组或string
。
只需使用ASCIIEnconding
命名空间中的System.Text
类。相关方法是:
char[] GetChars(byte[] bytes);
string GetString(byte[] bytes);
当然char
和string
是UTF-16,所以你并没有真正获得太多收益,因为你最终会付出代价&#34;价格&#34;你试图避免;无论是在可执行文件大小还是在运行时内存中。
最重要的是,我不确定你为什么要这样做,特别是在托管环境中它似乎毫无意义;如果您处于这种资源优化水平,那么在完全不同的环境中可能会更好。