GDI +非常慢,几乎完全是软件,而GDI是高度硬件加速的.GDI +是Graphics类在WinForms上使用的,它太慢了.
有没有人创建.NET GDI库,所以我们可以有速度?
[编辑]很多人都在推荐OpenGL/DirectX.我的要求是客户端兼容性,尤其是远程桌面.AFAIK远程桌面不支持开箱即用的OGL/DirectX.[/ EDIT]
我们的高吞吐量应用程序(~1gbps)从大型ReceiveBufferSize和SendBufferSize中获益匪浅.
我注意到在我的机器上我可以有100 MB的缓冲区大小没有问题,但在一些客户端和测试机器上,最大值略大于10 MB并且似乎是可变的.
是否有任何方法可以查询系统max tx/rx缓冲区大小.
我正在尝试使用一些固定字段来获取不安全结构的字段类型.固定字段FieldType不返回实际类型.
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public unsafe struct MyStruct
{
public UInt32 Field1;
public fixed sbyte Field2[10];
public UInt64 Field3;
}
void Test()
{
var theStruct = new MyStruct();
string output = "";
foreach (FieldInfo fi in theStruct.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance))
{
output += fi.Name + ": " + fi.FieldType.ToString() + "\r\n";
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
字段1: System.UInt32
字段2: TestProjectNS.MyStruct+<Field2>e__FixedBuffer0
字段3: System.UInt64
我正在寻找Field2告诉我它sbyte而不是TestProjectNS.MyStruct+<Field2>e__FixedBuffer0
我的性能敏感应用程序使用MemoryMappedFiles在许多AppDomain之间推送批量数据.我需要最快的机制来向接收AD发出信号,表明有新数据需要读取.
设计看起来像这样:
AD 1:写入MMF,写入数据时应通知读者AD
AD 2,3,N ..:MMF的读者
读者不需要知道写入了多少数据,因为每个写入的消息都将以非零int开头,并且它将读取为零,不用担心部分写入的消息.
(我认为)传统上,在单个AD中,Monitor.Wait/Pulse可用于此,我认为它不适用于AppDomains.
也可以使用MarshalByRefObject远程处理方法或事件,但我希望更快.(我在我的机器上测试了1,000,000 MarshalByRefObject调用/秒,不错,但我想要更多)
命名的EventWaitHandle大约是初始测量速度的两倍.
有什么更快的吗?
注意:只要最后一个信号没有丢失,接收AD就不需要获取每个信号.
令我惊讶的是,下面的方法在debug和release中产生了不同的结果:
int result = "test".GetHashCode();
Run Code Online (Sandbox Code Playgroud)
有什么方法可以避免这种情况吗?
我需要一种可靠的方法来散列字符串,我需要在调试和发布模式下保持一致的值.如果可能的话,我想避免编写自己的哈希函数.
为什么会这样?
仅供参考,反射器给了我:
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail), SecuritySafeCritical]
public override unsafe int GetHashCode()
{
fixed (char* str = ((char*) this))
{
char* chPtr = str;
int num = 0x15051505;
int num2 = num;
int* numPtr = (int*) chPtr;
for (int i = this.Length; i > 0; i -= 4)
{
num = (((num << 5) + num) + (num >> 0x1b)) ^ numPtr[0];
if (i <= 2)
{
break;
}
num2 = (((num2 << 5) + …Run Code Online (Sandbox Code Playgroud) 在WPF TabControl中,默认行为是在鼠标按下时更改选定的选项卡.
在我的应用程序中,更改选项卡有时会调整大小,有时鼠标注册事件将在另一个用户控件上调用,因为tabcontrol已移动.
如果我可以将标签页设置为仅在鼠标向上而不是鼠标按下时切换它将解决问题.
我想使用 64 位标识符,类似于 Guid 的使用方式。有什么好的方法可以做到这一点?我想保持低碰撞。
public static unsafe long GetLongGuid()
{
unchecked
{
fixed (byte* ptr = Guid.NewGuid().ToByteArray())
return *((long*)ptr) ^ *((long*)(ptr + 8));
}
}
Run Code Online (Sandbox Code Playgroud)
我应该只取高位还是低位?
或者有没有更好的原生 64 位唯一哈希函数?
我希望通过脚本定期修剪所有驱动器,我的服务器混合了 ext4 和 zfs。
我目前对已安装的 etx4 卷使用 fstrim -av,但 ZoL 的等效命令是什么?
我正在构建一个消息路由器,并希望它尽可能快.我希望保持在c#4.0内,并希望尽快使用套接字.我可能不需要将所有数据都带入托管内存.我正在处理字节数组并使用此方法将数据带入托管内存(除非找到更好的选项):http://www.codeproject.com/KB/cs/ReadingStructuresEmit.aspx
问题:
1)使用不安全的套接字是否有性能提升?多少?
2)当使用这样的不安全方法时,是否存在pinvoke或数据封送(所有结构都不安全)
public unsafe partial class Native
Run Code Online (Sandbox Code Playgroud)
{
[DllImport("Ws2_32.dll")]
public static extern int connect(SOCKET s, sockaddr_in* addr, int addrsize);
Run Code Online (Sandbox Code Playgroud)
}
3)对于#2,如果数据处理在不安全的情况下发生并且当不安全的方法返回时没有返回任何数据(那么可能没有任何内容被编组到托管中)是否重要?