我已经尝试了一个小时来安装GitHub说我需要编译C5 Collections 2.0文档的所有文件,我仍然没有运气.我还搜索了至少另外2个小时没有运气.我不知道他们为什么不自己编译.
有没有人为此编译.chm?这对我有很大的帮助.
我正在尝试找到一种存储大约7000万个texture2d/vector2集的引用的方法.为了澄清一点,我需要能够使用100左右的texture2d然后为它们分配一个矢量2 XY值,用于具有大约7000万个图块的图块地图.我只需要参考哪个texture2d与哪个vector2一起使用.我将动态/程序性地生成tile /坐标集我只需要一种存储所有这些的方法,现在不会炸毁我的ram.我试图使用一个字典,其中vector2作为键,而texture2d作为值,但是使用OutOfMemoryException杀死了我.然后我尝试了Wintellect Power Collections并使用了他们的MultiDictionary.但是,即使我将texture2d指定为唯一的键并使用vector2作为该键的7000万个值,它仍然会使用相同的异常终止.
所以我现在不知道该如何进行.我只需要存储引用以供以后访问.我不是想把它们画到屏幕上或类似的东西所以我无法弄清楚为什么只需要字典就需要700mb的ram.后来我才意识到我一直在让这些词典自己调整大小.这可能是问题吗?
我希望这是特定的,我已经整晚都在忙,所以我现在不打扰清理和发布任何代码.如果您认为我的代码是罪魁祸首而不是我的方法,请告诉我,我会为您发布.期待您的回答.
编辑:好的,这是我正在使用的代码.我清理了一下,但我知道它不是最好看的代码.如果您发现任何明显的问题或甚至效率低下,我会很高兴听到他们的消息.只是不要狠狠地打击我,因为这是我第一次使用c#:)
当WorldWidth和WorldHeight分别设定为8400时,7000万个瓷砖开始发挥作用.
class MapMaker
{
SpriteSheet spriteSheetMap;
SpriteSheet spriteSheet1;
SpriteSheet spriteSheet2;
SpriteSheet spriteSheet3;
SpriteSheet spriteSheet4;
SpriteSheet spriteSheet5;
SpriteSheet spriteSheet6;
SpriteSheet spriteSheet7;
SpriteSheet spriteSheet8;
SpriteSheet spriteSheet9;
SpriteSheet spriteSheet10;
SpriteSheet spriteSheet11;
SpriteSheet spriteSheet12;
SpriteSheet spriteSheet13;
SpriteSheet spriteSheet14;
SpriteSheet spriteSheet15;
SpriteSheet spriteSheet16;
SpriteSheet spriteSheet17;
SpriteSheet spriteSheet18;
SpriteSheet spriteSheet19;
SpriteSheet spriteSheet20;
SpriteSheet spriteSheet21;
SpriteSheet spriteSheet22;
SpriteSheet spriteSheet23;
Random rnd = new Random();
int WorldWidth = 250;
int WorldHeight = 250;
List<int> sprites = new List<int>();
int[][] TheGrid …Run Code Online (Sandbox Code Playgroud) 我一直在寻找2小时或更好的方法来使用Read7BitEncodedInt方法.我需要以某种方式使用它来减少我的文件大小(在这种情况下可能减少100mb或更多).我也在考虑使用ReadString方法,因为它似乎做了大致相同的事情.但这似乎不太合适,我不确定它会起作用.如果还有其他替代方案,我不知道我也愿意使用它.
总结.如何将Read7BitEncodedInt方法实现为以下代码?另外,我不太确定我的Write7BitEncodedInt方法也是正确的.
public void SaveFile()
{
using (FileStream stream = new FileStream("C:\\A_random.txt", FileMode.Create))
{
using (BinaryWriter writer = new BinaryWriter(stream))
{
for (int i = 0; i < typeCount.Count; i++)
{
writer.Write((byte)typeCount[i]);
writer.Write(type[i]);
}
writer.Close();
}
}
LoadFile();
}
public void LoadFile()
{
using (FileStream stream = new FileStream("C:\\A_random.txt", FileMode.Open))
{
using (BinaryReader reader = new BinaryReader(stream))
{
int i = 0;
while (stream.Position != stream.Length)
{
int count = reader.Read7BitEncodedInt();
byte val = reader.ReadByte();
for (int ii = 0; …Run Code Online (Sandbox Code Playgroud) 尺寸:~5mb
磁盘大小:~3GB
我们正在使用C#并在数据更改时不断保存数据,所有文件数据都必须在任何给定时间都可访问.基本上,如果某些内容发生变化,该数据必须保存.这就是为什么这么多数据有这么多文件的原因.数据也得到了很大的处理,因此将它们聚集在一起不是一种选择,因为微小的改变会导致大量的数据无缘无故地被保存.这些文件已经包含足够多,只有少量更改才能保存一个冗余.
当然有一种方法可以绕过文件大小的荒谬扩展,并且仍然保持我们已经实现的可访问性和节省效率.我们需要一种方法将这些文件打包到windows将被认为是单个文件中,但是这样我们就不必在发生变化时重写整个文件.
我知道拥有数千个小文件非常奇怪,但就我们而言,它大大提高了性能.如果可以避免的话,我们只是不想牺牲一种资源.
注意:文件具有RLE二进制数据,它们不是文本文件.
清晰度更新:5mb-> 3gb = 250mb(50x簇) - > 150gb =问题!
c# ×4
.net ×2
collections ×2
7-bit ×1
binary ×1
binarywriter ×1
chm ×1
diskspace ×1
hard-drive ×1
windows ×1
xna ×1