小编Phi*_*ght的帖子

如何使用C#泛型将这3种方法合并为一种?

我没有使用泛型,因此无法弄清楚是否可以使用泛型将以下三种方法合并为一种以减少重复.实际上我的代码目前有六种方法,但如果你可以解决这三种方法,那么其余的应该只使用相同的解决方案.

    private object EvaluateUInt64(UInt64 x, UInt64 y)
    {
        switch (Operation)
        {
            case BinaryOp.Add:
                return x + y;
            case BinaryOp.Subtract:
                return x - y;
            case BinaryOp.Multiply:
                return x * y;
            case BinaryOp.Divide:
                return x / y;
            case BinaryOp.Remainder:
                return x % y;
            default:
                throw new ApplicationException("error");
        }
    }

    private object EvaluateFloat(float x, float y)
    {
        switch(Operation)
        {
            case BinaryOp.Add:
                return x + y;
            case BinaryOp.Subtract:
                return x - y;
            case BinaryOp.Multiply:
                return x * y;
            case BinaryOp.Divide:
                return x / y; …
Run Code Online (Sandbox Code Playgroud)

c# generics

6
推荐指数
1
解决办法
1144
查看次数

WinRT和持久化结构与字节数组?

使用.NET 4.0,我可以通过使用Marshal类快速将结构转换为字节数组.例如,以下简单示例将在我的机器上以每秒大约100万次运行,这对于我的目的来说足够快......

    [StructLayout(LayoutKind.Sequential)]
    public struct ExampleStruct
    {
        int i1;
        int i2;
    }

    public byte[] StructToBytes()
    {
        ExampleStruct inst = new ExampleStruct();

        int len = Marshal.SizeOf(inst);
        byte[] arr = new byte[len];
        IntPtr ptr = Marshal.AllocHGlobal(len);
        Marshal.StructureToPtr(inst, ptr, true);
        Marshal.Copy(ptr, arr, 0, len);
        Marshal.FreeHGlobal(ptr);

        return arr;
    }
Run Code Online (Sandbox Code Playgroud)

但是Marshal类在WinRT下是不可用的,出于安全原因这是合理的,但这意味着我需要另一种方法来实现我的结构到/从字节数组.

我正在寻找适用于任何固定大小结构的方法.我可以通过为每个知道如何将特定结构转换为字节数组的结构编写自定义代码来解决这个问题,但这是相当繁琐的,我不禁觉得有一些通用的解决方案.

.net c# microsoft-metro windows-runtime

6
推荐指数
1
解决办法
1042
查看次数

FileStream.BeginWrite优于FileStream.Write?

我需要对同一个文件进行一批写操作,但是在文件中的不同位置.我希望以最佳性能实现这一点,因此查看了同步FileStream.Write和异步FileStream.BeginWrite方法.

同步实现很简单,只需在循环中调用FileStream.Write所需的次数即可.异步版本在循环中调用FileStream.BeginWrite,然后执行WaitHandle.WaitAll以阻止它们全部完成.令我惊讶的是,这比简单的同步版本慢.

我已经使用了正确的构造函数,因此我可以要求异步操作创建的FileStream和我还测试这说明假,所以他们没有在一个异步的方式确实操作IAsyncResult.CompletedSynchronous财产.似乎使用Be​​ginWrite的唯一好处是你在写入时不会阻塞你的线程.除了这个好处之外,使用异步版本还有什么意义吗?

这是我用于播放异步方法的测试代码,可能有明显的错误?

        // Size of a chunk to be written to file
        var chunk = 1024 * 64;

        // Number of chunks to write async
        var reps = 32;

        // Create new file and set length
        var fs = new FileStream(@"C:\testfile.dat", 
                                FileMode.Create, FileAccess.ReadWrite, 
                                FileShare.None, chunk, true);
        fs.SetLength(chunk * reps);

        // Allocate resources
        byte[] bytes = new byte[chunk];
        WaitHandle[] handles = new WaitHandle[reps];

        for (int i = 0; i < reps; i++)
        {
            fs.Seek(chunk * i, SeekOrigin.Begin);
            handles[i] = …
Run Code Online (Sandbox Code Playgroud)

.net c# asynchronous filestream

6
推荐指数
1
解决办法
5585
查看次数

实际的RISC-V指令代码在哪里?

我已经下载了最新的...

RISC-V指令集手册,第1卷:用户级ISA

...这很有趣,但是它实际上从未提供操作码/ funct3和其他指令格式的值。例如,按名称列出了LOAD / STORE / BRANCH操作码,但没有提供它们代表的实际位值。

实际列出的所有代码在哪里?

riscv

6
推荐指数
2
解决办法
5747
查看次数

Silverlight每次都下载程序集吗?

每次访问网站时是否下载Silverlight应用程序,还是检查版本/大小信息并仅下载较新版本的文件?

silverlight

5
推荐指数
1
解决办法
1086
查看次数

.NET 文化变革事件?

我有一个 .NET 自定义控件,它以依赖于文化的方式显示信息。为了提高性能,我在控件内缓存了一些信息,而不是每次都生成它。我需要知道文化是否发生了变化,以便我可以适当地重新生成这些内部信息。

有什么我参与过的活动吗?或者我是否必须在每次绘画时测试文化设置,看看它是否发生了变化?

.net culture

5
推荐指数
1
解决办法
3954
查看次数

迭代SHA512以使其更安全吗?

我目前使用SHA512和每位用户随机盐来哈希用户密码并将其存储在数据库中。在我读了这篇有关使用廉价GPU暴力破解攻击密码的文章之前,我一直认为这是非常安全的。

作为转换为bcrypt的替代方法,多次使用SHA512是否会提高安全性?在自己的输出上运行100或1000次以减慢该过程并使其变得更难暴力吗?还是SHA512的迭代实际上没有带来安全利益?

c# passwords bcrypt sha512

5
推荐指数
1
解决办法
2701
查看次数

将两个png图像合并为透明度并保持透明度

可能重复:
在C#/ .NET中合并两个图像

我有两个png格式图像,并且都定义了透明度.我需要将这些合并到一个新的png图像中,但不会丢失结果中的任何透明度.将第一个图像视为主图像,第二个图像用于添加叠加,例如添加/编辑/删除指示符.我正在尝试创建一个小实用程序,它将采用主图像和一组叠加,然后生成组合它们的结果输出图像集.

对于PHP的解决方案似乎有很多答案,但C#/没有任何答案

c# png transparency

5
推荐指数
1
解决办法
2万
查看次数

关闭使用WCF的线程时的额外步骤?

在处理过程中执行WCF调用时,我应该做些什么来优雅地关闭线程?

我似乎在我的服务器上出现内存泄漏,我已经跟踪它从我的工作线程进行WCF调用.我以一种简单的方式创建线程,就像这样......

var schedule = new Schedule();
var scheduleThread = new Thread(New ParameterizedThreadStart(schedule.Run));
scheduleThread.SetApartmentState(ApartmentState.STA);
scheduleThread.Priority = ThreadPriority.Lowest;
scheduleThread.Start(null);
Run Code Online (Sandbox Code Playgroud)

...以及执行我的测试代码的代码有问题...

public void Run(object param)
{
    var wcf = new TestServer.TestServerClient(...);
    wcf.Open();
    wcf.Ping();
    wcf.Close();
}
Run Code Online (Sandbox Code Playgroud)

...运行2000次后,我可以看到使用内存分析器,有以下类的2000个实例...

DispatcherOperationCallback
IntPtr
HwndSubclass
NativeMethods.WndProc
Run Code Online (Sandbox Code Playgroud)

那么,我是否应该执行一些与从线程中使用WCF相关的清理工作?调用GC.Collect()没有任何影响.

c# wcf multithreading memory-leaks

5
推荐指数
1
解决办法
145
查看次数

如何获取描述基类型数组的Type?

我需要为具有指定索引数的基类型数组创建一个Type实例.基本上我需要像以下那样的方法,我可以调用...

public Type GetArrayOfType(Type baseType, int numOfIndexes)
{
    return /* magic does here */
}
Run Code Online (Sandbox Code Playgroud)

所以调用函数会得到以下结果......

GetTypeArray(typeof(bool), 1) == typeof(bool[])
GetTypeArray(typeof(bool), 2) == typeof(bool[,])
GetTypeArray(typeof(bool), 3) == typeof(bool[,,])
Run Code Online (Sandbox Code Playgroud)

我能想出的唯一解决方案是......

public Type GetArrayOfType(Type baseType, int numOfIndexes)
{
    List<int> indexes = new List<int>();
    for(int i=0; i<numOfIndexes; i++)
        indexes.Add(1);

    return Array.CreateInstance(baseType, indexes.ToArray()).GetType();
}
Run Code Online (Sandbox Code Playgroud)

这确实有效,但必须创建所需类型的实例才能调用GetType()似乎并不理想.必须有一种方法来生成Type而不创建实例.还是有吗?

.net c# reflection types

5
推荐指数
1
解决办法
193
查看次数