我没有使用泛型,因此无法弄清楚是否可以使用泛型将以下三种方法合并为一种以减少重复.实际上我的代码目前有六种方法,但如果你可以解决这三种方法,那么其余的应该只使用相同的解决方案.
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) 使用.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下是不可用的,出于安全原因这是合理的,但这意味着我需要另一种方法来实现我的结构到/从字节数组.
我正在寻找适用于任何固定大小结构的方法.我可以通过为每个知道如何将特定结构转换为字节数组的结构编写自定义代码来解决这个问题,但这是相当繁琐的,我不禁觉得有一些通用的解决方案.
我需要对同一个文件进行一批写操作,但是在文件中的不同位置.我希望以最佳性能实现这一点,因此查看了同步FileStream.Write和异步FileStream.BeginWrite方法.
同步实现很简单,只需在循环中调用FileStream.Write所需的次数即可.异步版本在循环中调用FileStream.BeginWrite,然后执行WaitHandle.WaitAll以阻止它们全部完成.令我惊讶的是,这比简单的同步版本慢.
我已经使用了正确的构造函数,因此我可以要求异步操作创建的FileStream和我还测试这说明假,所以他们没有在一个异步的方式确实操作IAsyncResult.CompletedSynchronous财产.似乎使用BeginWrite的唯一好处是你在写入时不会阻塞你的线程.除了这个好处之外,使用异步版本还有什么意义吗?
这是我用于播放异步方法的测试代码,可能有明显的错误?
// 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) 我已经下载了最新的...
RISC-V指令集手册,第1卷:用户级ISA
...这很有趣,但是它实际上从未提供操作码/ funct3和其他指令格式的值。例如,按名称列出了LOAD / STORE / BRANCH操作码,但没有提供它们代表的实际位值。
实际列出的所有代码在哪里?
每次访问网站时是否下载Silverlight应用程序,还是检查版本/大小信息并仅下载较新版本的文件?
我有一个 .NET 自定义控件,它以依赖于文化的方式显示信息。为了提高性能,我在控件内缓存了一些信息,而不是每次都生成它。我需要知道文化是否发生了变化,以便我可以适当地重新生成这些内部信息。
有什么我参与过的活动吗?或者我是否必须在每次绘画时测试文化设置,看看它是否发生了变化?
可能重复:
在C#/ .NET中合并两个图像
我有两个png格式图像,并且都定义了透明度.我需要将这些合并到一个新的png图像中,但不会丢失结果中的任何透明度.将第一个图像视为主图像,第二个图像用于添加叠加,例如添加/编辑/删除指示符.我正在尝试创建一个小实用程序,它将采用主图像和一组叠加,然后生成组合它们的结果输出图像集.
对于PHP的解决方案似乎有很多答案,但C#/没有任何答案
在处理过程中执行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()没有任何影响.
我需要为具有指定索引数的基类型数组创建一个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而不创建实例.还是有吗?
c# ×7
.net ×4
asynchronous ×1
bcrypt ×1
culture ×1
filestream ×1
generics ×1
memory-leaks ×1
passwords ×1
png ×1
reflection ×1
riscv ×1
sha512 ×1
silverlight ×1
transparency ×1
types ×1
wcf ×1